3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個贊
如果只做md5,一般要在md5時候,加一個appkey之類的東東,或者說salt,這個東東是不通過參數(shù)傳遞的(前后端都知道值),這樣就防止別人篡改和構(gòu)造請求了。
如果同時做md5和加密,也可以,密鑰不傳就可以了。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個贊
補(bǔ)充一下樓上的答案,重點(diǎn)說說重放攻擊問題。
有可能請求被其他人抓包,拿來重復(fù)請求。
那么設(shè)計(jì)思路是下面這樣的:
首先,所有方案在加密的時候都應(yīng)該有一個約定的秘鑰。保證攻擊者不能自己算出sign
方案A:驗(yàn)證md5是否被請求過
這樣每次請求都有一個唯一的md5,服務(wù)端在第一次完成請求后,把md5寫入緩存。
下次處理請求之前先判斷一下有沒有這個md5,如果有就代表是重復(fù)請求。
但有沒有想到這里有個缺點(diǎn):
每一個請求都要寫一個md5進(jìn)緩存,請求量比較大的話非常占緩存
方案B:給參數(shù)里加個時間戳
如果時間差在60s以上,代表這個請求是被別人抓取到了,拿來做重復(fù)請求攻擊。
這種方案也有缺點(diǎn):
客戶端和服務(wù)端的時間一致性要求比較高。
終極方案:兩個結(jié)合一下。
時間戳+md5
1、時間差120s以上代表重復(fù)請求
2、md5寫緩存,緩存時長120s(大于等于上面的值就行),判斷如果有md5代表重復(fù)請求
這樣相對比較好的解決了重復(fù)請求問題。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊
其實(shí)我倒是關(guān)注 將參數(shù)排序 這個不排序 有什么影響嗎?如果直接把提交的數(shù)據(jù)拿來用不是更方便,畢竟安全體現(xiàn)再 appkey 上了啊
添加回答
舉報(bào)