最近迭代比較忙,也一直沒更新知識庫,就把專案的系統梳理一下,專案是前後臺分離的,所以後台就全部是封裝的介面,前後臺通過報文交換資料。這就涉及到介面的安全問題。下面就幾個點來保證介面的安全性。參考資料:
1. web api介面 安全驗證
2. api介面安全性設計
3. 如何限制使用者在某一時間段多次訪問介面
4. 如何設計api介面,請求介面時需要進行身份驗證,防止第三方隨意呼叫介面?
5. 通過***interceptor實現spring mvc中controller介面訪問資訊的記錄
介面的安全校驗方面我大致歸納了一下幾點,按照優先順序來說。
1.金鑰校驗(access-key)、授權機制(token)。
2.防止重複呼叫(ddos攻擊)。
3.防資料篡改的加密傳輸。
4.許可權校驗(access-clientid)。
5.ip位址限制。
6.日誌記錄。
1.我把金鑰校驗和授權機制放在一起,是因為他們的用法,原理差不多。
a. 金鑰校驗設定乙個金鑰比如key = 『2323dsfadfewrasa3434』。
這個key 只有傳送方和接收方知道。
呼叫時,傳送方,組合各個引數用金鑰 key按照一定的規則(各種排序,md5,ip等)生成乙個access_key。一起post提交到api介面。
接收方拿到post過來的引數以及這個access_key。也和傳送一樣,用金鑰key 對各個引數進行一樣的規則(各種排序,md5,ip等)也生成乙個access_key2。
對比access_key 和access_key2 。一樣。則允許操作,不一樣,報錯返回或者加入黑名單。
b.token授權機制:使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token(通常是uuid),並將token-userid以鍵值對的形式存放在快取伺服器中。服務端接收到請求後進行token驗證,如果token不存在,說明請求無效。
2.防止重複呼叫是通過在介面層加上***或者加上aop來記錄介面在規定時間內的呼叫次數。實現上用的redis快取。具體請參考如何限制使用者在某一時間段多次訪問介面。
3.防止資料篡改則是用一套可以逆向的演算法對客戶端的原始資料進行加密,然後呼叫介面給的全是加密後的密文。介面用逆向演算法在還原真實資料。和金鑰有點類似。
4.許可權校驗就是在客戶端的請求頭里加上乙個標誌碼。介面拿到這個這個標誌碼查庫/從快取拿資料看是否存在,或者是否配置了對應的許可權。
5.ip位址限制則和許可權校驗差不多,不過一般在內網中才使用。就是拿到客戶端請求頭資訊的ip位址,和快取或者資料庫查詢該ip有沒有配置上。
6.記錄日誌是記錄所有請求的報文,以便如果出現別的問題,可以及時找到日誌的來進行後續的維護。
下面是保溫請求頭中一般有的安全校驗節點:
介面設計的實現方案有兩種:
zhanglf1234567
zhanglfreqsystem>
127.0.0.1reqip>
2017-09-27t19:13:35reqtime>
contol>
p001serviceid>
001clientid>
passwordclientpasswd>
reqhead>
1. 用***攔截所有的介面請求,驗證通過後才能走對應的方法。
2. 用spring的aop面向切面,給介面的controller層新增安全校驗邏輯。
除了上面的設計外,我們還可以加上校驗開關:安全校驗開關的設定—通過具體某個介面類上的註解來決定該類是否開啟安全校驗。
後面我會具體這兩種方案進行**實現。這裡先總結一下。明確方向。
介面的安全性設計
介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...
php介面的安全設計要素 Token,簽名,時間戳
後端以api的方式將資料來源呈現出來是目前的趨勢,可以用在前後端分離的架構中,前後端分離之後,前後端人員能夠更加專注於自己板塊的東西 也可以用在後端與後端相互呼叫中。拿到介面後,前台就可以通過鏈結獲取介面提供的資料,而返回的資料一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的...
在Web 開發中,如何保證設計的介面安全性
介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...