本文基于微信開發者平臺發布的文章,增加了一些自己的思考。
背景:
小程序的業務接口在開發過程中如果不考慮安全,那么容易有安全漏洞,導致個人信息及隱私泄露風險。
本文主要記錄一些業務邏輯類的漏洞,這類漏洞有兩個特點:
- 不好自動化掃描出來;
- 比較常見;
開發原則
建議開發者在應用開發環節中始終基于以下原則:
- 互不信任原則: 不要信任用戶提交的數據,包括第三方系統提供的數據,必要的數據必須放在后臺校驗。
- 最小權限原則: 代碼、模塊等只擁有可以完成任務的最小權限,不賦予不必要的權限。
- 禁止明文保存用戶敏感數據: 需進行安全的加密,避免拖庫。
- 接口鑒權: 除登錄接口之外,應對所有非公開接口進行鑒權,并記錄詳細日志用于追溯。
- 小程序代碼(不包括云函數代碼)跟傳統 Web 應用的前端代碼類似,可被外部獲取及進行反混淆,重要業務邏輯應放在后臺代碼或云函數中進行。
- 后臺接口調用以及云函數調用,必須進行有效的身份鑒權。
漏洞類型——越權
這種漏洞暫時沒有辦法自動檢測,屬于業務邏輯漏洞,比較費人。

3. 未授權
部分小程序因業務屬于公開信息,所以未設置登錄授權檢查。導致該接口會被黑灰產利用,進行信息倒賣、信息監控等惡意行為。
用戶可以不通過登錄直接通過訂單 ID、手機號、車牌等信息訪問詳細信息。
漏洞類型——信息泄露
這種漏洞暫時沒有辦法自動檢測,屬于業務邏輯漏洞,比較費人。

漏洞類型——爬蟲遍歷
這種漏洞暫時沒有辦法自動檢測,屬于業務邏輯漏洞,比較費人。

漏洞類型——授權用戶信息變更不跟進
這種屬于設計上漏洞,可能從開始就沒設計好,用戶注銷、用戶更新后,用戶的資料后續要怎么處理。
風險識別
開發者通過微信小程序 API,經過用戶明確同意獲取了用戶資料,當遇到用戶資料過期、用戶主動撤銷、用戶注銷賬號等情況時,開發者需對先前獲取的用戶資料及時清理,依規及時履行相應個人信息保護義務,保護用戶權益。
處理建議
開發者需要設置「消息推送服務器配置」,及時接收微信平臺關于授權信息的通知并處理;
https://developers.weixin.qq.com/miniprogram/security/basic/listen.html
漏洞類型——注入類
注入類漏洞現在都可以自動檢測了,主要看看他建議的修復方式就好。
SQL注入

處理建議
-
使用數據庫提供的參數化查詢來進行數據庫操作,不允許直接通過拼接字符串的方式來合成 SQL 語句。
-
如果存在部分情況需要通過拼接的方式來合成 SQL ,拼接的變量必須要經過處理:「對于整數,需要判斷變量是否為整數類型;對于字符串,需要對單引號、雙引號等做轉義處理」
-
避免 Web 應用顯示 SQL 的報錯信息。
-
保證 Web 應用里每一數據層的編碼統一。
命令注入

處理建議
-
對用戶輸入的數據(如 ;、|、&等)進行過濾或轉義。
-
不要信任前端(WEB、小程序)發送請求的任何內容,所有參數都進行類型驗證,避免直接使用前端傳遞的命令去執行。
漏洞類型——上傳、下載類
這樣類漏洞現在也可以自動檢測了,主要看看他建議的修復方式就好。

處理建議
- 正確解析上傳文件的文件類型,通過白名單的方式限制可上傳的文件類型;
- 后臺檢查文件二進制頭;
- 上傳文件應該和后臺運行程序服務器隔離;
- 上傳文件目錄不允許有可寫、可執行權限;

處理建議
-
正確限制可下載文件所在的目錄范圍;
-
通過指定文件 id 的方式來查找下載對應的文件;
Reference
@開發者,這些漏洞你一定要看!
https://mp.weixin.qq.com/s/BSphYEjQb1PCHKW4qTGWXg
小程序安全指引

https://developers.weixin.qq.com/miniprogram/security/basic/risk.html
浙公網安備 33010602011771號