說說API的防重放機制

我們在設計接口的時候,最怕一個接口被用戶截取用于重放攻擊。重放攻擊是什么呢?就是把你的請求原封不動地再發(fā)送一次,兩次...n次,一般正常的請求都會通過驗證進入到正常邏輯中,如果這個正常邏輯是插入數據庫操作,那么一旦插入數據庫的語句寫的不好,就有可能出現(xiàn)多條重復的數據。一旦是比較慢的查詢操作,就可能導致數據庫堵住等情況。

這里就有一種防重放的機制來做請求驗證。

timestamp+nonce

我們常用的防止重放的機制是使用timestamp和nonce來做的重放機制。

timestamp用來表示請求的當前時間戳,這個時間戳當然要和服務器時間戳進行校正過的。我們預期正常請求帶的timestamp參數會是不同的(預期是正常的人每秒至多只會做一個操作)。每個請求帶的時間戳不能和當前時間超過一定規(guī)定的時間。比如60s。這樣,這個請求即使被截取了,你也只能在60s內進行重放攻擊。過期失效。

但是這樣也是不夠的,還有給攻擊者60s的時間。所以我們就需要使用一個nonce,隨機數。

nonce是由客戶端根據足夠隨機的情況生成的,比如 md5(timestamp+rand(0, 1000)); 它就有一個要求,正常情況下,在短時間內(比如60s)連續(xù)生成兩個相同nonce的情況幾乎為0。

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式