移動(dòng)開發(fā)通信之API接口安全設(shè)計(jì)

題外話:

有人說:就算是https加密加API接口加密黑客照樣可以攻擊你,小公司沒必要浪費(fèi)這個(gè)精力去考慮這個(gè)問題,API接口也沒必要去加密傳輸,過度設(shè)計(jì)實(shí)在是得不償失。

回:家里的錢放屋子里小偷也能偷,干嘛不放到馬路上去呢?把錢鎖在抽屜里是很有必要的。
什么是過度設(shè)計(jì):花一百萬買保險(xiǎn)柜只為了存一百塊錢。

還有,一個(gè)好的產(chǎn)品都是希望在考慮更多情況下,選擇合適的優(yōu)化方案的情況下完成的,否則就是態(tài)度有問題。

一、普通的API加密設(shè)計(jì)方案(加上https更好)

簡單的API加密設(shè)計(jì)方案

【步驟A】iOS端加固key
客戶端存儲(chǔ)約定的key不能簡單存放,不然一定反編譯很容易被獲?。ㄒ?yàn)槭呛唵渭用埽恍枰m結(jié)):
(1)、蘋果增加更安全的存儲(chǔ)方式:Keychain(相對于NSUserDefaults數(shù)據(jù)以明文的形式保存在)提供了一種安全的保存私密信息(密碼,序列號,證書等)的方式,每個(gè)ios程序都有一個(gè)獨(dú)立的keychain存儲(chǔ),將數(shù)據(jù)加密后存儲(chǔ)在本地,更安全。
(2)、通過8進(jìn)制或16進(jìn)制進(jìn)行轉(zhuǎn)換的形式獲取,這樣反編譯后只能看到類似03 78 67 這樣數(shù)字,增加難度。
(3)、綜合上面方法存儲(chǔ)

【步驟B】客戶端上傳加密設(shè)置
1、把header和參數(shù)安裝某種排序,比如page=13nickname=“小貓”生成字符串String1
2、String1拼接時(shí)間戳timestamp=134939349944生成String2
3、String2拼接約定的key參數(shù)成字符串String3
4、以約定的算法對String3加鹽進(jìn)行SHA256加密(或者M(jìn)D5+salt)生成sign
5、登錄的用戶需要把后臺(tái)返回的token一起上傳(Token是否有效根據(jù)后臺(tái)設(shè)定refreshToken是否過期判斷,過期要重新加載)

【步驟C】服務(wù)器校驗(yàn)
1、服務(wù)端對token、timestamp和sign進(jìn)行驗(yàn)證,只有三個(gè)參數(shù)都正確,查詢緩存沒有的,且timestamp在規(guī)定時(shí)間內(nèi),本次請求才有效
2、根據(jù)時(shí)間戳timestamp如何設(shè)置最大時(shí)間間隔:服務(wù)器最大時(shí)間容差1分鐘+客戶端請求超時(shí)30秒 = 1分30秒
3、服務(wù)器緩存:將sign以鍵值對的形式存放在緩存服務(wù)器中,用來屏蔽重復(fù)請求
4、對于需要登錄的請求:將用戶登錄后服務(wù)器返回給客戶端的Token以鍵值對的形式存放在緩存服務(wù)器中。服務(wù)端接收到請求后進(jìn)行Token驗(yàn)證,如果Token不存在,說明請求無效。

至此:一個(gè)普通的API加密已經(jīng)完成,一般黑客基本無心耗費(fèi)精力來破解了,投入產(chǎn)出比很重要,虧本買賣誰做??!

二、如果需要加強(qiáng)的,學(xué)習(xí)一下相關(guān)知識(shí)

1、關(guān)于加密的概念,很多人想當(dāng)然的以為自己的加密方式最安全,只要不告訴別人就行,哈哈,好比閉門鎖國,可能一炮就被別人干掉了??梢钥纯碵應(yīng)用密碼學(xué)]
2、認(rèn)為MD5不安全了,網(wǎng)上可以反查。能夠反查的都是一些有規(guī)律的字符,有效的處理效果才能更佳,參考應(yīng)用密碼學(xué)的笑話之MD5+Salt不安全
3、服務(wù)端動(dòng)態(tài)生成token,客戶端調(diào)用的時(shí)候需要回傳token,參考 微信公共平臺(tái) access_token
4、相關(guān)隨筆
移動(dòng)開發(fā)通信之http/https概念-優(yōu)缺點(diǎn)-選擇
移動(dòng)開發(fā)通信之https加密協(xié)議SSL/TLS理解
移動(dòng)開發(fā)通信之get/post理解和使用

其他學(xué)習(xí)資料:

應(yīng)用密碼學(xué)
螞蟻金服開發(fā)平臺(tái) 簽名與驗(yàn)簽
微信公共平臺(tái) access_token
通過Spring Session實(shí)現(xiàn)新一代的Session管理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容