PHP開發移動端接口(加強版)

前面講過:移動端與PHP服務端接口通訊流程設計(基礎版)api

對於 api_token 的校驗,其安全性還可再加強:安全

 

加強地方一:dom

 

再增長2張表,一個接口表,一個受權表,設計參考以下:ide

接口表加密

字段名 字段類型 註釋
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 過時時間(戳)

(注:只列出了核心字段,其它的再擴展吧!!!)blog

 

執行過程以下:token

一、移動端與服務端生成的 api_token 進行對比,若是不相等,則直接返回錯誤,不然,進入下一步;接口

二、根據接口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 進行校對,若是不相等,表示被竄改過,接下來怎麼操做,本身看着辦吧!

相關文章
相關標籤/搜索