简单直接地回答:前端不能真正防止 SQL 注入,只能做“辅助性”的工作。
下面分点说清楚原因和正确做法。
SQL 注入的本质问题是:后端把用户输入直接拼进了 SQL 语句。
示例(错误写法):
// 前端传过来
username = "admin' --"
// 后端拼 SQL
"SELECT * FROM user WHERE name = '" + username + "'"
结果变成:
SELECT * FROM user WHERE name = 'admin' --'
这个攻击发生在 服务器端执行 SQL 的时候,而:
✅ 前端再怎么防,都挡不住“直接打接口”的人
前端可以:
例如:
if (!/^\w{3,20}$/.test(username)) {
alert("用户名格式不正确");
}
⚠️ 但这是 用户体验层,不是安全层。
Node.js 示例(mysql2):
await db.execute(
"SELECT * FROM user WHERE name = ?",
[username]
);
Java(PreparedStatement):
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM user WHERE name = ?"
);
ps.setString(1, username);
➡️ 不管用户输入什么,都不会被当成 SQL 代码
#{} 而不是 ${})DROP、FILE 等前端防 SQL 注入 = 门锁装在窗外
真正的安全在后端:参数化查询 + 后端校验 + 最小权限
如果你愿意,我可以:
你用的是哪种技术栈?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。