1. 程式人生 > WINDOWS開發 >php開發api介面資料安全

php開發api介面資料安全

API介面安全的介紹
技術分享圖片
前三點我們可以使用加密的方式來解決,第四點我們寫程式碼時要注意防xss和sql注入等。
設定基本引數
首先是介面訪問的安全性的保障,不是誰想對介面訪問就能訪問的,解決思想:
一般我們可以設定一些訪問的基本引數,然後對基本引數進行加密生成sign值,然後將這些基本引數和sign都放在http協議的header頭中,每一次訪問都要帶上這些基本引數和sign。
對於app的介面的基本引數:
app的版本號version 如version1.1.2
app的裝置的型別app_type:安卓手機,安卓平板,IOS手機,IOS平板
app的裝置的裝置號:did
model:裝置的型號:如三星,oppo15,huaweip30等
時間戳:
sign值:使用上面引數進行加密得到的值
(也可以自定義一些引數)
sign的生成可以使用AES的加密方式,注意客戶端的加密解密的演算法要一致。laravel框架中加密的密串是app_key使用的演算法是AES-256-CBC
技術分享圖片
技術分享圖片
sign值也可以使用md5加密方式,我們可以把基本引數先進行ksort排序,再轉成鍵值對的字串然後對其md5加密成sign,然後把基本引數和sign值一起傳入給服務端,在服務端重複客戶端的加密方式,對比sign的值。

對於web的介面的基本引數:
隨機數
時間戳
使用隨機數和時間戳和祕鑰key生成sign值
(也可以有別的基本引數,可以自定義)
當我們傳送http請求時,我們應該將隨機數時間戳,以及使用隨機數和時間戳和祕鑰key通過AES或者MD5加密生成的sign值,傳遞到服務端,在服務端重複客戶端的加密方式對比sign的值。(祕鑰key值不用傳遞,是服務端和客戶端共同約定的密串)(這種方式類似於微信公眾號加密的方式)

以上方式的優點和弊端
使用以上的加密方式可以防止使用者對資料包進行串改,但是防不住使用者將網路包進行抓包,然後對介面傳送大量的請求佔用資源。
解決方案
我們可以對介面進行時間上的判斷,我們可以拿服務端的時間戳和客戶端傳來的時間戳的差值不能超過10秒,否則使用者則訪問不到我們的介面。
以上方式的優點和缺點
優點:
可以解決使用者一直往介面傳送請求。
缺點:
1由於客戶端的時間戳和服務的時間戳不一定一樣,這樣使用者可以修改客戶端的時間,繼續在10種內傳送大量的請求。
2即使時間問題解決,使用者仍舊可以在10秒以內大量的往介面傳送請求。
解決方案:
對於時間問題,我們可以在服務端寫一個返回時間戳的介面,返回的時間最好是毫秒。

我們可以驗證完sign值後將sign存入到redis中(資料庫,檔案快取,memcache中),過期時間只要比10秒中大一點即可,等下一次檢測sign值之前判斷redis中有無sign值,如果有說明sign已經被驗證過了,說明被別人抓包了,如果沒有我們在檢測sign同時將sign值存入到redis中。
所以檢測流程:
1先檢測時間是否超過規定時間。
2檢測redis中有無sign值。
3檢測sign是否正確。
4對傳送過來的引數進行解密。

注意:我們傳遞引數也可以傳遞使用對稱加密加密後的密串,在服務端可以進行解密獲取引數。我們服務端返回資料時亦可以使用對稱加密,客戶端收到資料後可以對密串進行解密