慕碼人8056858
2019-01-19 06:40:46
在網上看到一個方案是:“客戶端將參數排序進行MD5加密后,得到sign。 服務端再次將你的參數排序進行MD5加密,比較兩次得到的值,相同校驗成功。為了防止抓包,然后不停發送攻擊的包“
這樣做 咋就能防止攻擊了呢? 攻擊者也可以進行 把參數MD5加密后發給服務器啊。
3 回答
一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
如果只做md5,一般要在md5時候,加一個appkey之類的東東,或者說salt,這個東東是不通過參數傳遞的(前后端都知道值),這樣就防止別人篡改和構造請求了。
如果同時做md5和加密,也可以,密鑰不傳就可以了。
精慕HU
TA貢獻1845條經驗 獲得超8個贊
補充一下樓上的答案,重點說說重放攻擊問題。
有可能請求被其他人抓包,拿來重復請求。
那么設計思路是下面這樣的:
首先,所有方案在加密的時候都應該有一個約定的秘鑰。保證攻擊者不能自己算出sign
方案A:驗證md5是否被請求過
這樣每次請求都有一個唯一的md5,服務端在第一次完成請求后,把md5寫入緩存。
下次處理請求之前先判斷一下有沒有這個md5,如果有就代表是重復請求。
但有沒有想到這里有個缺點:
每一個請求都要寫一個md5進緩存,請求量比較大的話非常占緩存
方案B:給參數里加個時間戳
如果時間差在60s以上,代表這個請求是被別人抓取到了,拿來做重復請求攻擊。
這種方案也有缺點:
客戶端和服務端的時間一致性要求比較高。
終極方案:兩個結合一下。
時間戳+md5
1、時間差120s以上代表重復請求
2、md5寫緩存,緩存時長120s(大于等于上面的值就行),判斷如果有md5代表重復請求
這樣相對比較好的解決了重復請求問題。
添加回答
舉報
0/150
提交
取消
