開放介面API安全性

2021-08-28 12:36:25 字數 2093 閱讀 6084

開放介面時最基本需要考慮到介面不應該被別人隨意訪問,而我也不能隨意訪問到其他使用者的資料,從而保證使用者與使用者之間的資料隔離。這個時候我們就有必要引入token機制了。具體的做法: 在使用者成功登入時,系統可以返回客戶端乙個token,後續客戶端呼叫服務端的介面,都需要帶上token,而服務端需要校驗客戶端token的合法性。token不一致的情況下,服務端需要攔截該請求。

服務端從某種層面來說需要驗證接受到資料是否和客戶端發來的資料是否一致,要驗證資料在傳輸過程中有沒有被注入攻擊。這時候客戶端和服務端就有必要做簽名和驗籤。具體做法:客戶端對所有請求服務端介面引數做加密生成簽名,並將簽名作為請求引數一併傳到服務端,服務端接受到請求同時要做驗籤的操作,對稱加密對請求引數生成簽名,並與客戶端傳過來的簽名進行比對,如簽名不一致,服務端需要攔截該請求

服務端仍然需要識別一些惡意請求,防止介面被一些喪心病狂的人玩壞。對介面訪問頻率設定一定閾值,對超過閾值的請求進行遮蔽及預警。

服務端需要構建異常統一處理框架,將服務可能出現的異常做統一封裝,返回固定的code與msg,防止程式堆疊資訊暴露。

https能夠有效防止中間人攻擊,有效保證介面不被劫持,對資料竊取篡改做了安全防範。但http公升級https會帶來更多的握手,而握手中的運算會帶來更多的效能消耗。這也是不得不考慮的問題。

總得來說,我們非常有必要在設計介面的同時考慮安全性的問題,根據業務特點,採用的安全策略也不全相同。當然大多數安全策略更多的都是提高安全門檻,並不能保證100%的安全,但該做的還是不能少。

對於敏感的api介面,需使用https協議,https是在http超文字傳輸協議加入ssl層,它在網路間通訊是加密的,所以需要加密證書。https協議需要ca證書,一般需要交費。

原理:使用者登入後向伺服器提供使用者認證資訊(如賬戶和密碼),伺服器認證完後給客戶端返回乙個token令牌,使用者再次獲取資訊時,帶上此令牌,如果令牌正取,則返回資料。對於獲取token資訊後,訪問使用者相關介面,客戶端請求的url需要帶上如下引數:

時間戳: timestamp

token令牌: token

然後將所有使用者請求的引數按照字母排序(包括timestamp,token),然後使用md5(可以加點鹽)或者sha1加密,全部大寫,生成sign簽名,這就是所說的url簽名演算法。然後登陸後每次呼叫使用者資訊時,帶上sign,timestamp,token引數。例如:原請求北京(post和get都一樣,對所有引數排序加密),加上時間戳和token後北京×tamp=12445323134&token=wefkfjdskfjewfjkjfdfnc,然後根據url引數生成sign,最終的請求如北京×tamp=12445323134&token=wefkfjdskfjewfjkjfdfnc&sign=fdk2434jkjfd334fdf2,其最終的原理是減小明文的暴露次數,保證資料安全的訪問。

api請求客戶端想伺服器端第一次傳送用使用者認證資訊(使用者名稱和密碼),伺服器端請求到改請求後,驗證使用者資訊是否正確。如果正確:則返回乙個唯一不重複的字串(一般為uuid),然後在redis(任意快取伺服器)中維護token —> uid的使用者資訊關係,以便其他api對token的校驗。如果錯誤:則返回錯誤碼。

伺服器設計乙個url請求攔截規則:

判斷是否包含timestamp,token,sign引數,如果不含有返回錯誤碼。

判斷伺服器接到請求的時間和引數中的時間戳是否相差很長一段時間(時間自定義如半個小時),如果超過則說明該url已經過期(如果url被盜,他改變了時間戳,但是會導致sign簽名不相等)。

判斷token是否有效,根據請求過來的token,查詢redis快取中的uid,如果獲取不到這說明該token已過期。

根據使用者請求的url引數,伺服器端按照同樣的規則生成sign簽名,對比簽名看是否相等,相等則放行。(url簽名也無法100%保證其安全,也可以通過公鑰aes對資料和url加密,但這樣如果無法確保公鑰丟失,所以簽名只是很大程 度上保證安全)。

此url攔截只需對獲取身份認證的url放行(如登陸url),剩餘所有的url都需攔截。

對於使用者登入我們需要建立token–uid的關係,使用者退出時需要需刪除token –> uid的關係

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以鍵值對的形式存放在快取伺服器中。服務端接收...