小程序(微信/支付宝等)前端看起来是“封闭环境”,但实际上它和传统的 Web 应用一样,最终都要和后端服务、数据库交互,所以SQL 注入的本质并没有消失,只是攻击面发生了变化。
下面从原理到原因系统说明。
SQL 注入的本质:用户输入被当作 SQL 代码执行
只要满足以下三点,就可能存在 SQL 注入:
小程序只是“前端壳”,真正危险的是后端接口。
很多人误以为:
小程序在微信里运行,用户碰不到代码,所以安全
❌ 错误。
小程序:
攻击者根本不需要进小程序,只需:
POST /api/user/list
{
"id": "1 OR 1=1"
}
小程序后端常见技术:
这些语言和框架本身不防 SQL 注入,防的是“你怎么写代码”。
❌ 错误示例:
String sql = "SELECT * FROM user WHERE id = " + id;
✅ 正确示例:
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM user WHERE id = ?"
);
ps.setInt(1, id);
常见误区:
但实际上:
容易被忽略的注入点:
order by例如:
ORDER BY ${column}
即使值是字符串,也可能被注入。
很多人以为:
用了 MyBatis / Hibernate 就安全
❌ 错误用法照样注入:
MyBatis:
ORDER BY ${sort}
正确应:
ORDER BY #{sort}
(或白名单控制)
SELECT * FROM user WHERE username = 'xxx' AND password = 'xxx'
用户名输入:
admin' --
SELECT * FROM goods WHERE name LIKE '%关键词%'
关键词:
%' UNION SELECT password FROM admin --
?id=1 OR 1=1
| 误区 | 现实 |
|---|---|
| 小程序封闭 | 接口完全开放 |
| 用户碰不到代码 | 攻击者不碰代码 |
| 有平台审核 | 审核不等于安全 |
| 用了云开发就安全 | 云函数也会拼 SQL |
✅ 永远使用 参数化查询
✅ 使用 ORM 正确写法
✅ 对排序/字段使用 白名单
✅ 后端做 输入校验
✅ 最小权限数据库账号
✅ 定期安全测试(含小程序接口)
小程序不会天然防 SQL 注入,真正决定安全的,是后端怎么写 SQL。
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。