拒絕接口裸奔!開(kāi)放API接口簽名驗(yàn)證!
來(lái)源:r6d.cn/kChH
請(qǐng)求身份是否合法?
請(qǐng)求參數(shù)是否被篡改?
請(qǐng)求是否唯一?
AccessKey&SecretKey (開(kāi)放平臺(tái))
請(qǐng)求身份
防止篡改
按照請(qǐng)求參數(shù)名的字母升序排列非空請(qǐng)求參數(shù)(包含AccessKey),使用URL鍵值對(duì)的格式(即key1=value1&key2=value2…)拼接成字符串stringA; 在stringA最后拼接上Secretkey得到字符串stringSignTemp; 對(duì)stringSignTemp進(jìn)行MD5運(yùn)算,并將得到的字符串所有字符轉(zhuǎn)換為大寫,得到sign值。
重放攻擊
實(shí)現(xiàn)
http://api.test.com/test?name=hello&home=world&work=java生成當(dāng)前時(shí)間戳timestamp=now和唯一隨機(jī)字符串nonce=random 按照請(qǐng)求參數(shù)名的字母升序排列非空請(qǐng)求參數(shù)(包含AccessKey) stringA="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random";拼接密鑰SecretKey stringSignTemp="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random&SecretKey=secret";MD5并轉(zhuǎn)換為大寫 sign=MD5(stringSignTemp).toUpperCase();最終請(qǐng)求 http://api.test.com/test?name=hello&home=world&work=java×tamp=now&nonce=nonce&sign=sign;

Token&AppKey(APP)
Token身份驗(yàn)證
用戶登錄向服務(wù)器提供認(rèn)證信息(如賬號(hào)和密碼),服務(wù)器驗(yàn)證成功后返回Token給客戶端; 客戶端將Token保存在本地,后續(xù)發(fā)起請(qǐng)求時(shí),攜帶此Token; 服務(wù)器檢查Token的有效性,有效則放行,無(wú)效(Token錯(cuò)誤或過(guò)期)則拒絕。 安全隱患:Token被劫持,偽造請(qǐng)求和篡改參數(shù)。
Token+AppKey簽名驗(yàn)證
實(shí)現(xiàn)

后續(xù)請(qǐng)求
和上述開(kāi)放平臺(tái)的客戶端行為類似,把AccessKey改為token即可。

點(diǎn)擊原文閱讀獲得原創(chuàng)整理:《第2版:互聯(lián)網(wǎng)大廠面試題》
評(píng)論
圖片
表情
