目录
本文基于微信开发者平台发布的文章,增加了一些自己的思考。
背景:
小程序的业务接口在开发过程中如果不考虑安全,那么容易有安全漏洞,导致个人信息及隐私泄露风险。
本文主要记录一些业务逻辑类的漏洞,这类漏洞有两个特点:
- 不好自动化扫描出来;
- 比较常见;
开发原则
建议开发者在应用开发环节中始终基于以下原则:
- 互不信任原则: 不要信任用户提交的数据,包括第三方系统提供的数据,必要的数据必须放在后台校验。
- 最小权限原则: 代码、模块等只拥有可以完成任务的最小权限,不赋予不必要的权限。
- 禁止明文保存用户敏感数据: 需进行安全的加密,避免拖库。
- 接口鉴权: 除登录接口之外,应对所有非公开接口进行鉴权,并记录详细日志用于追溯。
- 小程序代码(不包括云函数代码)跟传统 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