初級web api的設計 二) 防重放攻擊

2021-08-11 18:13:03 字數 1158 閱讀 8756

在針對資料系統的攻擊中,重放攻擊是最常見的攻擊方式,api的設計中需要特別考慮設計好如何防範重放攻擊。

重放攻擊(replay attacks)

指攻擊者傳送乙個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。重放攻擊。

防重放攻擊中,最重要的手段是給訊息打上乙個唯

一、不可以重新生成的編號,保證這個編號只能使用一次。

一、利用timestamp。

在引數中加入timestamp=***xx. 並且加入到簽名中簽名的方法。

http://request_url/request_string×tamp=***x&sign=***xx
當伺服器接收到請求之後,會首先檢查簽名是否有效,如果有效,則對比時間戳是否在一定時間內,比如60s(需要對伺服器和客戶端時間進行全域性同步),則請求有效,否則請求過期。

這種方法可以將重放攻擊的可能時間縮短到設定的時間段(60s),但是在60s之內,還是不能杜絕重放攻擊。需要進行公升級修改。

二、利用timestamp+nonce

在加入timestamp的同時,客戶端生成乙個隨機數rand,而後生成乙個引數nonce = md5(timestamp+rand),放入到請求串中。

//請求的引數

http://request_url?request_string&nonce=***&timstamp=***x

伺服器在接收到請求後,首先進行簽名驗證,然後快取(如redis)中檢查,這個nonce是否存在,如果不存在,則建立這個key,設定失效時間為timestamp的有效時間(60s),驗證通過;如果存在,則這個nonce已經被使用過了,則判定為重放攻擊。

server偽**如下:

if(check_sign())       

}else

三、安全分析

演算法二中,由於使用了簽名機制,可以保證引數不被更改,並且攻擊者不能構造出合法的請求串和對應的簽名。nonce的生成是取決於客戶端的時間戳和隨機數,在失效時間內,客戶端生成兩個同樣的nonce(相同的timestamp和相同的隨機數)屬於小概率時間,基本不可能發生,所以演算法二在防重放攻擊上是安全的。

web api的設計 防重放攻擊

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

客戶端防重放設計

客戶端通道早在1.1版本中便實現了伺服器防重放攻擊功能,但始終沒有實現客戶端防重放攻擊。這樣會使得客戶端存在被重放攻擊的危險,如使用者在轉賬時被重放了轉賬失敗頁面,導致使用者重複轉賬。為此,我們需要在客戶端通道中實現客戶端防重放功能。我們需要實現以下需求 在伺服器響應中增加序列號,實現客戶端防重放功...

API設計中防重放攻擊

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