防止 SQL 注入(SQL Injection) 的核心原则是:永远不要把用户输入直接拼接到 SQL 语句中。下面从“最推荐做法”到“辅助措施”系统说明。
这是防止 SQL 注入的首选方案。
"SELECT * FROM user WHERE name = '" + username + "'"
Java(JDBC)
String sql = "SELECT * FROM user WHERE name = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
Python(MySQL)
cursor.execute(
"SELECT * FROM user WHERE name = %s",
(username,)
)
PHP(PDO)
$stmt = $pdo->prepare("SELECT * FROM user WHERE name = ?");
$stmt->execute([$username]);
✅ 参数化后,用户输入只会被当作“数据”,不会被当作“SQL 代码”。
ORM 会自动使用参数化查询。
常见 ORM:
#{})、Hibernate⚠️ 注意:
#{} 安全,${} 有注入风险适用于:
if (!Arrays.asList("id","name").contains(sortField)) {
throw new IllegalArgumentException("非法字段");
}
int数据库账号应:
rootDROP、FILE 等危险权限即使发生注入,也能减少破坏范围。
❌ 以下方式 不能防注入:
replace("'","''")防止 SQL 注入 = 参数化查询 + ORM + 输入白名单 + 最小权限
如果你愿意,我可以:
直接把代码或场景发我就行。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。