個(gè)人總結(jié)接口安全需要注意以下幾點(diǎn)
一、避免明文:
- post —— post幔欧、get等請(qǐng)求方式只是語義不同罪治,本質(zhì)都是基于TCP/IP協(xié)議的http數(shù)據(jù)傳輸,在安全性上區(qū)別很小礁蔗,在開發(fā)者眼里等于是沒有區(qū)別觉义。
- get在請(qǐng)求地址上明文拼接參數(shù),請(qǐng)求會(huì)被瀏覽器記錄浴井,數(shù)據(jù)會(huì)被緩存晒骇;
- post參數(shù)不會(huì)被瀏覽器記錄或緩存,也不會(huì)被服務(wù)器日志記錄磺浙;
cookie —— cookie主要作用就是會(huì)話保持洪囤,它本身其實(shí)并不是什么安全機(jī)制,要保證cookie安全仍然需要配合其它安全機(jī)制撕氧,如設(shè)置過期時(shí)間瘤缩、數(shù)據(jù)加密。
編碼 —— 使用類似base64等編碼的自定義編碼方式呵曹,或者用通用的加密算法,如md5何暮,DES奄喂,AES,根據(jù)安全性需求自己決定使用什么算法和編碼海洼。
二跨新、防止信息截取,偽造用戶行為坏逢,篡改
- 前端和后端以約定的算法加密參數(shù)拼接在一起字符串域帐,后端拿到加密串后解密驗(yàn)證參數(shù),驗(yàn)證一致才接受請(qǐng)求是整。
- 這種方式存在app被反編譯算法泄露的風(fēng)險(xiǎn)肖揣,也存在開發(fā)者泄露算法的風(fēng)險(xiǎn)。
- 登錄的時(shí)候后端生成token并返回給前端浮入,token使用公鑰龙优、uid、時(shí)間戳等來計(jì)算后生成事秀,請(qǐng)求接口時(shí)再帶上token彤断。
- 使用非對(duì)稱加密算法野舶,前端數(shù)據(jù)全部使用公鑰加密,后端使用私鑰來解密和驗(yàn)證宰衙。需要注意的是:后端私鑰要妥善保管平道。
- 這種方式需要讓用戶隔一段時(shí)間自動(dòng)退出(可以通過設(shè)置token時(shí)效實(shí)現(xiàn)),使token只在用戶人為登錄登出之間有用供炼。token可以放進(jìn)redis緩存等一段時(shí)間自動(dòng)失效一屋,也可以存在數(shù)據(jù)庫,但需要在登錄登出時(shí)修改數(shù)據(jù)庫使token失效或刪除token劲蜻。
三陆淀、防止中間人攻擊
對(duì)于開發(fā)者來說避免MITM攻擊最有效的方式就是使用https接口。https本質(zhì)也是非對(duì)稱加密先嬉,是在http協(xié)議上添加了SSL協(xié)議轧苫。
- 需要先向服務(wù)器發(fā)起一個(gè)無保護(hù)的請(qǐng)求,來初始化SSL疫蔓,因?yàn)榈谝淮芜B接https服務(wù)器要先把證書和簽名發(fā)給客戶端含懊。
- https首次連接時(shí)比較慢,因?yàn)镾Sl協(xié)議包含兩部分衅胀,握手協(xié)議和記錄協(xié)議岔乔,握手協(xié)議部分需要使用非對(duì)稱算法計(jì)算出當(dāng)前通信的秘鑰。這個(gè)秘鑰是當(dāng)前通信的對(duì)稱加密秘鑰滚躯。
四雏门、防內(nèi)鬼
由內(nèi)部人員開發(fā)固定寫死的加密方案都存在被內(nèi)部人員破解的風(fēng)險(xiǎn),當(dāng)然可以引入可靠第三方的黑箱算法掸掏,而作為普通開發(fā)者最實(shí)用的方式就是在算法簽名字符串中引入隨機(jī)字符串茁影。
使用時(shí)間戳或者隨機(jī)數(shù)參與生成加密簽名,并保存在數(shù)據(jù)庫或者redis丧凤,配合使用數(shù)據(jù)庫權(quán)限和Linux用戶權(quán)限募闲,開發(fā)人員只能修改算法,數(shù)據(jù)庫只有有權(quán)限的人能獲取愿待。結(jié)合非對(duì)稱加密浩螺、隨機(jī)串、數(shù)據(jù)庫和Linux用戶權(quán)限仍侥,已經(jīng)可以很好地保證安全了要出,可以既防外又防內(nèi)。
五农渊、安全登錄
接口安全的第一道也是最重要的一道關(guān)便是安全登錄厨幻,如果用戶使用網(wǎng)站或者app登錄的過程中泄露了密碼,那什么安全機(jī)制都是空談了。
對(duì)于登錄的安全性况脆,銀行網(wǎng)站和app的實(shí)現(xiàn)方式最值得參考饭宾,主要有如下方式:
- 短信驗(yàn)證碼
- 密碼錯(cuò)誤次數(shù)限制
- 異地登錄、更換設(shè)備登錄時(shí)短信通知
- 使用https接口
- 密碼輸入使用自定義的鍵盤
- 登錄參數(shù)使用非對(duì)稱加密
- 人臉識(shí)別