微信开发者

@开发者,这些漏洞你一定要看!

近期,平台收到开发者及用户反馈,部分常用小程序的业务接口在开发过程中存在安全漏洞,会导致个人信息及隐私泄露。比如,黑灰产仅通过车牌号,就可在停车类小程序中查询任意汽车所在的具体位置等等。

对此,微信团队已在开发者工具、官方文档、控制台等显著位置为开发者进行强安全风险提示,并提供 IP 白名单、加密数据推送等手段保障信息安全。

同时提醒广大开发者,在自身的业务服务开发过程中,需格外关注信息安全的保护,防止恶意人员对业务信息进行针对性的攻击和挟持。

建议开发者在应用开发环节中始终基于以下原则:

  1. 互不信任原则: 不要信任用户提交的数据,包括第三方系统提供的数据,必要的数据必须放在后台校验。

  2. 最小权限原则: 代码、模块等只拥有可以完成任务的最小权限,不赋予不必要的权限。

  3. 禁止明文保存用户敏感数据: 需进行安全的加密,避免拖库。

  4. 接口鉴权: 除登录接口之外,应对所有非公开接口进行鉴权,并记录详细日志用于追溯。

以下是微信团队结合常见案例总结的安全漏洞及相应改进建议,请开发者高度重视并自查自纠。

越权漏洞

开发者提供的后端接口在被调用时,没有对调用者的身份做相应权限校验,从而让用户可以访问到不被授权的信息资源(也包含查询、修改、删除操作)。

越权漏洞一般分为水平越权、垂直越权。

1. 水平越权:用户可以访问其他用户的信息资源

比如:用户 1 在 A 小程序下单发快递,恶意用户 2 通过快递单号可以用自己的身份在小程序后端服务中查询到用户 1 的详细信息和收货地址信息(物流之外的隐私信息)。

2. 垂直越权:低权限的用户可以访问高权限的资源

比如:小程序后端服务中有给管理员使用的退款接口,恶意用户 1 通过该接口对订单进行退款操作。

处理建议

  1. 建议开发者对后端服务接口进行周密的权限校验,可通过 openid 来标记登录用户并判断该用户是否具备资源的访问权限。

  2. 不要直接在小程序端或网页端进行权限的判断,权限均应放在后端统一校验。

  3. 无论业务形态上是否需要登录鉴权,都应设置鉴权校验,并记录详细的操作日志以备后续分析和恶意风险识别。

信息泄露

开发者由于业务需要,会向用户请求手机号、收货地址、银行卡等用户隐私信息,但在获取后不做隐私保护行为,被恶意分子利用造成隐私外泄。

比如:用户 1 在 A 小程序实名下单跑腿业务,用户 2 在收货时通过取货码可查看用户 1 的身份证完整信息。(部分开发者虽未在页面展示,但是接口返回却包含该信息)

处理建议

  1. 敏感信息不应以明文、注释、可逆的编码方式(如 base64)、不安全散列函数(如 MD5、 SHA1)等形式直接出现在小程序文件内。

  2. 后端服务返回的信息,保持最小信息原则,只提供用于前端展示和处理的,不要返回过量信息。

  3. 敏感信息如用户的银行卡号、手机号等确实需要展示的,要进行脱敏处理。

爬虫遍历

开发者提供的信息检索接口使用数字自增 ID(或有特定规律)作为查询参数,且接口不做人机和登录鉴权校验,很容易造成数据信息被拖库。

比如:A 小程序有会员服务,会员 ID 是自增的,恶意用户 1 按照会员 ID 规律伪造请求,使用原本用于会员报名的接口,获取了 A 小程序的全部会员信息;且接口返回的信息未做任何隐私保护,恶意用户 1 掌握了所有会员的手机号、姓名、地址等隐私信息,属于重大隐私泄露案例。

很多开发者都习惯使用自增 ID 作为订单号、任务 ID 等关键的索引,但如果接口未做鉴权和隐私信息保护,很有可能被恶意分子利用,偷取大量关键信息,对自身业务造成损失。

处理建议

  1. ID 信息不应该使用简单的递增,如必须递增则后缀应添加随机码,后端在查询时,应拆出随机码进行校验。随机码相当于为每个 ID 加了密码,恶意分子很难批量伪造。

  2. 如保证更安全,可叠加使用对称加密方式将 ID 做对称加密处理,服务端只接收加密处理的 ID 查询请求。减少恶意分子的规律发现,从而放弃。

  3. 不要在业务中以用户列表的形式展示所有用户,只在业务必要时提供。

    eg:比如社区应用,只在帖子和评论里包含用户信息,或通过链接直接访问用户信息,不要在一个页面板块中展示所有用户,这相当于为恶意分子主动送信息,省去了其规律拼凑 ID 的步骤。

以上常见的安全漏洞类型,请开发者优先自查和处理。更多安全漏洞和改进建议,请参考开发安全指引。

除了微信生态应用之外,开发者如有自研 APP 或其他平台的应用服务,也应遵循行业的安全标准对业务进行信息保护,切实保护用户隐私安全。