鍍金池/ 問答/Java  PHP  Python  C  GO  HTML/ 設計一個app調(diào)用的接口,如何防止截取之后重放

設計一個app調(diào)用的接口,如何防止截取之后重放

設計一個app調(diào)用的接口,如何防止截取之后重放

回答
編輯回答
愚念

params(treeMap) sign(params,key)

2017年5月19日 18:56
編輯回答
安于心

單純的sign+time會存在漏洞,比如截取后立刻重放可能該請求還是有效的, 這取決于截取時效和當前時間與time的時間差的閥值.

使用sign+time+redis能實現(xiàn)該功能:

  1. 去redis中查找是否有key為sign的string

    - 如果有,說明這個key已在有效期內(nèi)被使用了,那么這個請求就可以判斷是重放請求
  2. 檢查sign的有效性和當前時間與time的時間差的閥值

    - 如果有效,則在redis創(chuàng)建這個key,把時效時間設置得比時間差的閥值**略長**即可.
    

網(wǎng)上也有基于time+nonce+sign+redis的方案,不過個人認為nonce與sign的功能是重復的,可以省略,當然nonce的存儲空間比存儲sign更有優(yōu)勢,自己取舍.

最后, 請使用https增加截取成本.

2018年9月22日 13:36
編輯回答
詆毀你

添加sign+time, 接口驗證time及sign
sign中需要將time加入一起生成.

2018年3月24日 09:59
編輯回答
孤客

請求被劫持之后,劫持者完全可以不用修改請求任何內(nèi)容,直接重放。所以只有加強傳輸成的安全性才是解決問題的根本。

2017年11月7日 21:58