java開發API接口防止重放攻擊和參數防篡改


防篡改

在客戶端與服務端請求交互的過程中,請求的數據容易被攔截並篡改,比如在支付場景中,請求支付金額為 10 元,被攔截后篡改為 100 元,由於沒有防篡改校驗,導致多支付了金錢,造成了用戶損失。因此我們在接口設計時必須考慮防篡改校驗,加簽、驗簽就是用來解決這個問題的。划重點,敲黑板:加簽、驗簽是用來解決防篡改問題的。

 // 獲取token String token = request.getHeader("token"); // 獲取時間戳 String timestamp = request.getHeader("timestamp"); // 獲取隨機字符串 String nonceStr = request.getHeader("nonceStr"); // 獲取請求地址 String url = request.getHeader("url"); // 獲取簽名 String signature = request.getHeader("signature");

常用的防止重放攻擊策略主要分為以下兩種:
1、基於 加時間戳的方案
2、基於 token 的方案
3、基於 時間戳和 token 的方案

基於時間戳的方案
在請求中增加時間戳參數要來表示請求時間戳,服務方端接收該請求后,根據當前時間生成一個接收時間戳,然后根據兩個時間戳的差值進行請求判定,如果差值大於指定的閾值,則認為請求無效,否則請求通過。關於閾值的選定,可以根據接口的響應速度進行適當的調整,一般默認為 60 秒。

 

if((接收時間戳-請求時間戳) > 60){ "請求失敗" } else { "請求通過" }

 

基於 token 的方案
在請求中增加一個通過指定規則產生的 token,標識請求的唯一性,服務方接收該請求后,先判斷緩存集合中是否存在該 token,如果存在則認為此次請求無效,否則將 token 放入緩存中,通過請求通過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM