微信小程序作為一款輕量級(jí)的應(yīng)用,因其有著較強(qiáng)的靈活性,開發(fā)成本低,推廣裂變快等特點(diǎn),在很多領(lǐng)域得到廣泛的應(yīng)用。
本文基于小程序在電商領(lǐng)域的應(yīng)用場(chǎng)景,將常見的安全問(wèn)題進(jìn)行分析匯總,整理成安全需求基線,以期不斷地完善,然后在更多的業(yè)務(wù)場(chǎng)景下應(yīng)用。
01、基礎(chǔ)安全
(1)涉及數(shù)據(jù)敏感,采用私有化部署。
(2)通過(guò)負(fù)載均衡、內(nèi)容分發(fā)等技術(shù),保障業(yè)務(wù)高可用。
(3)PS:比較大的圖片要進(jìn)行優(yōu)化,同時(shí)避免出現(xiàn)比較大的圖片帶有隨機(jī)參數(shù)(jpg?t=xx),一旦引流,所有圖片請(qǐng)求回源,將導(dǎo)致帶寬跑滿現(xiàn)象。
02、重點(diǎn)功能
(1)用戶注冊(cè)授權(quán),添加隱私政策。
(2)文件上傳,對(duì)上傳文件的類型、大小、擴(kuò)展名等信息進(jìn)行校驗(yàn),防止任意文件上傳。
(3)用戶自定義發(fā)布的內(nèi)容需進(jìn)行內(nèi)容審核(例如:文本、圖片、視頻等),可調(diào)用公有云API 檢測(cè)。
03、業(yè)務(wù)安全
(1)防越權(quán)繞過(guò),對(duì)用戶權(quán)限進(jìn)行認(rèn)證。
(2)例如,遍歷用戶id導(dǎo)致敏感信息泄露,需對(duì)用戶進(jìn)行權(quán)限驗(yàn)證。
(3)防業(yè)務(wù)邏輯繞過(guò),防止用戶可以直接執(zhí)行后面的流程,從而繞過(guò)某些階段。
(4)例如:積分兌換的場(chǎng)景,將積分扣減和兌換拆分為兩個(gè)接口,攻擊者可直接執(zhí)行兌換,不執(zhí)行積分扣減。
(5)防數(shù)據(jù)篡改,重要業(yè)務(wù)數(shù)據(jù)需后端進(jìn)行校驗(yàn)。
(6)例如:用戶的游戲成績(jī)直接篡改可用于游戲作弊,需增加簽名認(rèn)證,防止數(shù)據(jù)被篡改。
(7)防條件競(jìng)爭(zhēng)繞過(guò)限制。
(8)例如:在做積分抽獎(jiǎng)時(shí),應(yīng)考慮如何應(yīng)對(duì)高并發(fā)攻擊。
04、敏感信息保護(hù)
(1)OpenID、unionid作為微信用戶的唯一身份標(biāo)示,禁止在業(yè)務(wù)系統(tǒng)的URL、返回參數(shù)等地方使用OpenID、unionid。
(2)禁止在小程序前端代碼中,寫入明文的AppId和secret、AccessKey及其他敏感配置信息。
(3)敏感數(shù)據(jù)前端展示,應(yīng)進(jìn)行脫敏處理,敏感數(shù)據(jù)包括但不僅限于姓名、手機(jī)號(hào)、地址等。
05、身份鑒別
在實(shí)現(xiàn)會(huì)話管理功能時(shí),應(yīng)同時(shí)滿足以下幾條要求:
(1)建立唯一的,具有一定復(fù)雜度的用戶會(huì)話標(biāo)識(shí)。
(2)通過(guò)OpenID或unionid識(shí)別用戶身份,并建立賬號(hào)綁定關(guān)系。
(3)應(yīng)具有超時(shí)退出機(jī)制,超過(guò)一定空閑時(shí)間,會(huì)話標(biāo)識(shí)失效。
(4)禁止使用不安全的鑒權(quán)方式,例如使用手機(jī)號(hào)鑒權(quán),可能存在信息泄露的風(fēng)險(xiǎn)。
06、其他
(1)正式發(fā)布前,要關(guān)閉小程序調(diào)試模式。
(2)進(jìn)行滲透測(cè)試,針對(duì)前端代碼和小程序API進(jìn)行安全檢測(cè)。
(3)對(duì)小程序前端代碼進(jìn)行必要的保護(hù)措施,如代碼加密、壓縮、混淆、反調(diào)試等。