通常可以使用MD5或SHA-1對API參數進行簽名,在服務器端通過校驗簽名結果來驗證數據是否被修改。
舉個例子:添加用戶
地址:http://192.168.0.10/v1/user/add?sign=MD5(請求參數 + timestamp + access_token)×tamp=1496978464401 方法:POST 消息頭: Host:192.168.0.10 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0 Accept:text/json, */*; q=0.01 Content-Type:application/json; charset=UTF-8 Content-Length:67 Connection:keep-alive Authentication:Basic Y2hlbmNoPTExMTExMQ== 請求參數: {name: "zhangsan", email: "zhangsan@org.com", phone: "1318907653"}
1. acess_token通過消息頭Authentication傳遞。
2. 將請求參數,當前時間戳以及access_token一起進行計算簽名:sign=MD5(請求參數 + timestamp + access_token),服務器端接收到參數時,先進行簽名驗證,如果簽名不正確,則說明數據被修改,返回400。
但是,簡單的MD5簽名規則也可能被破解,攻擊者只需要使用相同的規則即可輕松修改數據。
所以,建議在對參數進行簽名時添加鹽值。為了避免鹽值保存在客戶端被泄露,可以動態從服務器端動態獲取鹽值,即:sign=MD5(請求參數 + timestamp + access_token + 動態鹽值)。