API介面安全性設計

2021-07-30 06:27:54 字數 1205 閱讀 8606

介面的安全性主要圍繞token、timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看:

token授權機制:使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token(通常是uuid),並將token-userid以鍵值對的形式存放在快取伺服器中。服務端接收到請求後進行token驗證,如果token不存在,說明請求無效。

時間戳超時機制:使用者每次請求都帶上當前時間的時間戳timestamp,服務端接收到timestamp後跟當前時間進行比對,如果時間差大於一定時間(比如5分鐘),則認為該請求失效,這個時間要保證足夠完成本次請求的同時盡量短,可以減少快取伺服器的壓力(見簽名機制)。

簽名機制:將token和時間戳加上其他請求引數就行md5或sha-1演算法(可根據情況加點鹽)加密,加密後的資料為本次請求的簽名sign,並將該簽名存放到快取伺服器中,超時時間設定為跟時間戳的超時時間一致(這就是為什麼要盡量短,二者時間一致可以保證無論在timestamp規定時間內還是外本url都只能訪問一次)。服務端接收到請求後以同樣的演算法得到簽名,並跟當前的簽名進行比對,如果不一樣,說明引數被更改過,直接返回錯誤標識。同乙個簽名只能使用一次,如果發現快取伺服器中已經存在了本次簽名,則拒絕服務。

整個流程如下:

1、客戶端通過使用者名稱密碼登入伺服器並獲取token

2、客戶端生成時間戳timestamp,並將timestamp作為其中乙個引數

3、客戶端將所有的引數,包括token和timestamp按照自己的演算法進行排序加密得到簽名sign

4、將token、timestamp和sign作為請求時必須攜帶的引數加在每個請求的url後邊(http://url/request?token=123×tamp=123&sign=123123123)

5、服務端寫乙個過濾器對token、timestamp和sign進行驗證,只有三個引數都正確且在規定時間內,本次請求才有效

在以上三中機制的保護下,

如果黑客劫持了請求,並對請求中的引數進行了修改,簽名就無法通過;

如果黑客使用已經劫持的url進行dos攻擊,伺服器則會因為快取伺服器中已經存在簽名而拒絕服務,所以dos攻擊也是不可能的;

如果黑客隔一段時間進行一次dos攻擊(假如這個時間大於簽名在快取伺服器中的快取時長),則會因為時間戳超時而無法完成請求,這就是為什麼簽名的快取時長要跟時間戳的超時時長一樣。

如果簽名演算法和使用者名稱密碼都暴露了,那齊天大聖來了估計也不好使吧。。。。

API介面安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...

API介面安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...

API介面安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...