数据传输未加密
很多开发者在调用后端接口时,图省事直接使用 HTTP 协议。比如一个商城类小程序,在提交订单时如果还在走 HTTP,用户的收货地址、手机号甚至支付信息都可能被中间人截获。曾有个社区团购项目就因此出了问题,用户刚下单,垃圾短信立马就跟上了。正确做法是所有接口必须使用 HTTPS,哪怕本地调试也别例外。
wx.request({
url: 'https://api.example.com/order',
method: 'POST',
data: orderData,
success(res) {
console.log(res.data);
}
});用户身份伪造
有些小程序把登录态 token 存在本地,还明文保存。用户 A 能轻易改成用户 B 的 token,直接越权查看别人的信息。比如某个健身房预约系统,会员改了 storage 里的 uid,就能冒充教练进入管理页面。应该在服务端校验 session 合法性,前端不存储敏感身份标识,每次请求都通过加密凭证验证。
开放能力滥用
微信提供的 wx.downloadFile、wx.uploadFile 等接口若没加限制,攻击者可以利用它下载恶意文件或发起资源耗尽攻击。有款工具类小程序曾被用来批量抓取第三方网站内容,就是因为 downloadFile 没做域名白名单控制。需要在 config 配置合法域名,同时服务端对请求频率做限流。
代码注入风险
页面跳转时如果直接拼接 URL 参数,容易被插入恶意脚本。例如:page?redirect=${userInput},用户输入的内容如果没有过滤,可能带入可执行代码。虽然小程序运行环境相对封闭,但模板渲染或动态执行逻辑中仍要避免使用 eval 或类似方式处理不可信数据。
敏感信息硬编码
开发阶段把测试密钥写进代码里,上线忘了删。像 appId、secret、后台管理地址这些一旦泄露,攻击者就能模拟合法请求。有个企业内部小程序就把 API 密钥提交到了公开仓库,不到两天就被自动化扫描工具发现,大量员工数据被拉走。建议将敏感配置抽离到构建环境变量中,绝不提交到版本库。
权限过度申请
一个简单的记事本小程序非要获取用户位置、通讯录权限,不仅会被平台警告,用户也会警觉。权限申请应遵循最小化原则,用不到的别乱要。曾经某天气插件因申请蓝牙权限被下架,其实根本用不上,只是开发者复制了其他项目的配置文件。