SQL 注入风险(SQL Injection) 是指:
应用程序在拼接或处理 SQL 语句时,把用户输入的内容直接当作 SQL 代码执行,导致攻击者可以通过构造特殊输入,改变原本的 SQL 逻辑,从而:
假设登录 SQL 是这样拼的:
SELECT * FROM users
WHERE username = '用户输入'
AND password = '用户输入';
如果用户输入用户名:
admin' --
最终 SQL 变成:
SELECT * FROM users
WHERE username = 'admin' --' AND password = '';
-- 是 SQL 注释,后面的密码校验被忽略,直接以 admin 登录。
字符串拼接 SQL
String sql = "SELECT * FROM user WHERE name = '" + name + "'";
动态 SQL 未校验
前端参数直接进 SQL
| 风险类型 | 说明 |
|---|---|
| 数据泄露 | 查到全表、其他用户数据 |
| 数据破坏 | 删除、修改业务数据 |
| 权限提升 | 登录管理员账号 |
| 系统失控 | 结合数据库功能执行系统命令 |
Java(PreparedStatement)
String sql = "SELECT * FROM user WHERE name = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, name);
MyBatis
<select id="getUser">
SELECT * FROM user WHERE name = #{name}
</select>
❌
${name}有注入风险
✅#{name}安全
SQL 注入风险 = 把用户当“代码”执行了
防注入的核心 = 永远别拼 SQL,用参数化
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。