防重放攻擊實現

2022-06-18 19:06:10 字數 1915 閱讀 5963

1.防重放攻擊:請求被攻擊者獲取,並重新傳送給認證伺服器,從而達到認證通過的目的。

2。解決方案:

a. 基於timestamp防止重放攻擊

每次 http 請求時,都新增 timestamp 時間戳的引數,服務端接收到請求時,解析 timestamp 值,並與當前時間進行比較,判斷是否超過60s,

如果超過60s 則丟棄該請求。

b. 基於nonce值得防重放攻擊

每次http請求時,都新增 乙個固定長度的隨機數或請求ip加隨機數進行hash生成的字串,服務端在接受到請求的時候,解析請求的nonce值,並將nonce值存於資料庫或快取中,

當請求時,判斷資料庫或快取中是否存在該nonce值,如果存在則丟棄該請求。 此時,使用nonce值,在 http 請求時,nonce值可以保證請求的唯一性。

c .基於timstamp和nonce值防止重放攻擊

單純基於 timestamp 進行防重放攻擊也會存在風險,如果請求被中間人或是黑客獲取,且請求的時間戳與當前時間比較時,仍小於60s 時,此時則

不能進行防重放攻擊。

單純使用nonce值時,需要服務端不斷地儲存nonce值,則會導致資料庫儲存大量的nonce值,影響效率。

基於以上兩種情況,則將兩者結合一起使用,nonce值可以保證請求的唯一性,timestamp可以保證請求的時效性。並將儲存於資料庫或快取中的nonce值,

每隔60s清除一次或將快取中的nonce值時效時間設定為60s。這樣就可以減少nonce值對資料庫的壓力,提高效能。

3. 使用證書(公鑰與私鑰),timestamp 與nonce值進行防重放與防篡改

以上請求中nonce值或時間戳等值,若都使用明文傳輸,會存在被中間人或黑客擷取,再次發起請求的風險。

很多需要進行防重放攻擊的場景則都需要保證很高的安全性,所以在整個過程中,可以使用證書進行資料簽名,保證請求不被篡改。

使用證書的公鑰與私鑰保證請求引數以及timestamp與nonce值不被篡改的方案有兩種:

第一種方案:(客戶端使用公鑰對資料加密,服務端私鑰解密,校驗資料的有效性)

1.客戶端向服務端發起https請求

2.服務端接受到請求後,生成公鑰和私鑰,公鑰相當於鎖,私鑰相當於鑰匙,只有私鑰才能開啟公鑰的內容

3.服務端返回客戶端公鑰。

4.客戶端接受到公鑰,並解析公鑰的有效性,比如頒發者,到期時間等,如果解析異常,則提示證書錯誤,並進行證書更新。

客戶端解析公鑰ok後,對請求體進行加密(此時可將timestamp與nonce值在請求體中進行傳輸),並傳輸給服務端

5.服務端解析客戶端傳過來的資料,並進行解析,並找到儲存於服務端的私鑰,對該請求體進行解密,並解析出timestamp 與

nonce值,此時判斷兩個值得有效性,如果在使用服務端私鑰進行解密處理異常時,則提示請求非法。

第二種方案:(客戶端使用私鑰簽名,服務端使用公鑰驗籤,校驗資料的有效性)

1.客戶端向服務端發起https請求

2.服務端接受到請求後,生成公鑰和私鑰,公鑰相當於鎖,私鑰相當於鑰匙,只有私鑰才能開啟公鑰的內容

3.服務端返回客戶端私鑰

4.客戶端使用私鑰對請求進行簽名(簽名的格式可以將http請求頭與請求體按按照一定格式進行簽名:string signstr = header+&+body),

並使用authorition 欄位以請求頭的方式,將簽名的資料傳到服務端

5.服務端解析對應的請求,解析出請求頭與請求body,拼接簽名的原始格式:string signstr = header+&+body,服務端並解析出該請求私鑰

對應的公鑰。用公鑰驗籤,判斷資料是否被篡改,驗籤通過後,解析出nonce 值與timestamp值,進行防重放的校驗

防重放攻擊

以前總是通過timestamp來防止重放攻擊,但是這樣並不能保證每次請求都是一次性的。今天看到了一篇文章介紹的通過nonce number used once 來保證一次有效,感覺兩者結合一下,就能達到乙個非常好的效果了。重放攻擊是計算機世界黑客常用的攻擊方式之一,所謂重放攻擊就是攻擊者傳送乙個目的...

API設計中防重放攻擊

否,加密可以有效防止明文資料被監聽,但是卻防止不了重放攻擊。我們在設計介面的時候,最怕乙個介面被使用者擷取用於重放攻擊。重放攻擊是什麼呢?就是把你的請求原封不動地再傳送一次,兩次.n次,一般正常的請求都會通過驗證進入到正常邏輯中,如果這個正常邏輯是插入資料庫操作,那麼一旦插入資料庫的語句寫的不好,就...

web api的設計 防重放攻擊

重放攻擊 replay attacks 指攻擊者傳送乙個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。重放攻擊。防重放攻擊中,最重要的手段是給訊息打上乙個唯 一 不可以重新生成的編號,保證這個編號只能使用一次。一 利用timestamp。在引數中加入timest...