php開發api接口數據安全

API接口安全的介紹
php開發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
php開發api接口數據安全
php開發api接口數據安全
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對發送過來的參數進行解密。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章