細說RESTful API安全之防止重放攻擊


一. 重放攻擊概述

百科對重放攻擊的描述:https://zh.wikipedia.org/wiki/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB

簡而言之,重放攻擊的產生是由於安全信息被攻擊者截取,用於欺騙服務器。
而在REST風格的軟件架構中,如果僅僅使用HTTP協議,請求數據很容易被網絡抓包截取,因此在API層面必須考慮防止重放攻擊的設計。
圖片來源於網絡

 

二. 防止重放攻擊實踐

在工程實踐中,可以通過時間戳,請求序列號等方式在一定程度上防止大規模的重放攻擊。
實現方式不同,效率和難易程度上略有差異,需要根據業務系統實際需求選擇合適的方式。

1. 使用時間戳方式
在請求參數中添加時間戳參數,服務器端首先驗證時間戳timestamp是否有效,比如是服務器時間戳5分鍾之前的請求視為無效;
優點:實現簡單
缺點:需要客戶端和服務器時鍾同步,存在重放攻擊時間窗口。


2. 使用請求序列號方式
雖然使用時間戳方式可以在一定程度上控制重放攻擊,但是存在時間限制。在指定時間窗口下,任然不可避免會受到攻擊。
服務器端和客戶端約定一個序列號生成算法(保證全局唯一性),客戶端每次請求時都需要攜帶請求序列號。
服務器端接到請求時,先驗證序列號是否合法,不合法直接拒絕。否則查看緩存中是否已經存在過該序列號,若已經存在,表明該請求已經被處理,不允許再次調用。
本次處理完畢,將請求序列號緩存。
這樣可以保證一個序列號對應的請求只會被處理一次,相對比較安全地杜絕了重放攻擊。
優點:不需要客戶端和服務器時鍾同步,每個請求只允許被處理一次,杜絕重放攻擊。
缺點:實現相對復雜,客戶端序列號生成算法存在被破解的風險。

3. 總結
涉及到安全問題,再怎么強調都不為過。
安全防護也不是單一的,需要多層次的檢測。如:除了在應用層進行保護,常常還會在外層部署安全網關。
結合實際的業務需求,選擇合理的安全實現機制即可。

【參考】
http://yuanhuan.blog.51cto.com/3367116/1441298 API重放攻擊的防御策略分析
http://cn.soulmachine.me/2014-01-24-cluster-time-sync-using-ntp/ 集群時間同步--架設內網NTP服務器
http://andylhz2009.blog.51cto.com/728703/946380 內網外網服務器時間同步解決方案
http://51write.github.io/2014/04/03/ntp/ 如何實現多台機器(系統)時間的同步

 


免責聲明!

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



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