前面講過:移動端與PHP服務端介面通訊流程設計(基礎版)
對於 api_token 的校正,其安全性還可再增強:
增強地方一:
再增加2張表,一個介面表,一個授權表,設計參考如下:
介面表
| 欄位名 |
欄位類型 |
注釋 |
| api_id |
int |
介面ID |
| api_name |
varchar(120) |
介面名,以"/"作為分割線,如 blog/Index/addBlog |
| api_domain |
varchar(255) |
所屬領域 |
| is_enable |
tinyiny(1) |
1可用,0不可用 |
| add_time |
int |
添加時間 |
(註:只列出了核心欄位,其它的再擴充吧!!!)
授權表
| 欄位名 |
欄位類型 |
注釋 |
| client_id |
int |
用戶端ID |
| api_id |
int |
api編號 |
| api_name |
varchar(120) |
|
| is_enabled |
tinyint(1) |
是否可用 1:可用 0:不可用 |
| add_time |
int |
添加時間(戳) |
| expire_time |
int |
到期時間(戳) |
(註:只列出了核心欄位,其它的再擴充吧!!!)
執行過程如下:
1、移動端與服務端產生的 api_token 進行對比,如果不相等,則直接返回錯誤,否則,進入下一步;
2、根據介面URL,組裝 api_name,再加上用戶端傳回的 client_id 為參數,尋找 “授權表”記錄,如果記錄存在,且有效(是否可用,是否到期),則表示許可權驗證通過,返回介面資料,否則返回錯誤資訊;
增強地方二:
對於一些很特殊的介面,怎麼特殊,哪些算特殊,我也不知道,總而言之,就是感覺http請求有可能被劫取,傳遞參數有可能被竄改等情況,還是舉個例子來說吧:
有個直接轉賬介面,頁面上 我輸入的是5元,表示我要給對方某某轉賬5元,結果在http傳遞過程中,被人劫取並竄改成了 10000元,而且入賬對象改成了“駭客”的帳號,那不是虧大發了,思考了一下,應該有2種方案解決這個問題,
方案一:走https,這個就不多說,比較公認的安全機制;
方案二:走數位簽章,實現原理如下:
一個http請求,假如需要傳遞如下3個參數
參數名1=參數值1
參數名2=參數值2
參數名3=參數值3
我們可以再追加一個參數,該參數的名為 identity_key (名字是什麼不重要),該參數的值為 前幾個參數值按順序相加,再加密後的結果。
即:
identity_key = md5('參數值1' + '參數值2' + '參數值3' + '加密金鑰');
於是,最終傳遞的參數有:
參數名1=參數值1
參數名2=參數值2
參數名3=參數值3
client_id=client_id值
identity_key=md5('參數值1' + '參數值2' + '參數值3'+ 'client_id值' + '加密金鑰')
服務端接到參數後,再按相同的加密規則重建一份 identity_key,服務端的identity_key和用戶端的identity_key 進行校對,如果不相等,表示被竄改過,接下來怎麼操作,自己看著辦吧!