数据传输未加密
很多开发者在开发小程序时,为了图省事,直接通过 HTTP 明文传输用户登录信息或敏感数据。比如一个电商类小程序,在提交订单时把用户的手机号、收货地址、身份证号一股脑发出去,网络环境一旦不安全,这些信息很容易被截获。实际案例中,有人在公共 Wi-Fi 下用抓包工具就能看到邻居买药的详细记录,问题就出在这儿。
接口缺乏权限校验
部分小程序后端接口设计粗糙,请求时只靠前端传个 user_id 就放行操作。攻击者只要修改请求参数,比如把 URL 中的 user_id 从自己的改成别人的,就能查看他人订单、聊天记录甚至删除数据。就像小区门禁只靠住户自己报名字就开门,陌生人随便说一句‘我是3栋的’就能进楼。
代码中硬编码敏感信息
有些开发者习惯把 AppSecret、API 密钥写在前端代码里,觉得“反正别人看不到”。但小程序代码打包后很容易被反编译,通过工具打开 wxss 或 js 文件,密钥直接暴露。曾经有个社区团购小程序因为把数据库连接串写在配置文件里,导致上万条用户信息被批量导出。
const config = {
apiBase: 'https://api.example.com',
appId: 'wx1234567890abcdef',
appSecret: 'abcdef1234567890' // 千万别这么干!
};本地存储滥用
小程序提供了 wx.setStorageSync 来保存数据,不少人顺手就把 token、用户身份存进去。但这个存储是明文的,手机一旦被root或越狱,数据一览无余。更危险的是,如果页面存在 XSS 漏洞,恶意脚本也能读取这些内容。建议敏感信息用服务端 session 控制,客户端只保留必要缓存。
开放能力调用不当
像 web-view 组件如果加载了不可信的网页,页面内嵌的 JavaScript 可能通过 JSSDK 调用小程序能力,比如获取用户位置、发起支付。曾有仿冒理财小程序通过 web-view 加载钓鱼页,诱导用户授权后直接扣款。使用这类功能必须严格校验域名白名单,避免动态拼接 URL。
反编译与代码混淆不足
小程序包本质上是 zip 压缩文件,解压后能得到完整的前端代码。如果逻辑复杂又没做混淆,攻击者能快速理清业务流程,找出漏洞点。比如优惠券发放逻辑写在前端判断,攻击者修改条件就能无限领券。上线前应使用代码压缩和变量混淆工具增加逆向难度。
用户输入未做校验
表单提交、评论功能如果不对内容过滤,可能引发存储型 XSS。例如在商品评价里插入一段脚本,其他用户打开详情页时就会自动执行。虽然小程序运行环境较封闭,但仍存在 DOM 操作场景,尤其在使用 rich-text 渲染富文本时风险更高。所有用户输入应服务端过滤并限制长度类型。