贝利信息

SQL 如何防止 SQL 注入?

日期:2026-01-19 00:00 / 作者:舞夢輝影
最有效的方式是使用参数化查询防止SQL注入。通过占位符区分代码与数据,如pymysql中cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,));表名等结构元素需白名单校验;辅以最小权限、错误信息隐藏等措施。

最有效的方式是使用参数化查询(预编译语句),而不是拼接 SQL 字符串。

用参数化查询代替字符串拼接

直接把用户输入拼进 SQL 里,比如 "SELECT * F

ROM users WHERE name = '" + name + "'",是高危操作。数据库会把拼进去的内容当作 SQL 代码执行,攻击者可以输入 ' OR '1'='1 来绕过验证。

正确做法是使用占位符,让数据库区分“代码”和“数据”:

避免动态拼接表名、列名等结构元素

参数化查询只能防止值(value)被注入,不能用于表名、列名、排序字段、LIMIT 数值等语法结构部分。这些必须通过白名单严格控制:

其他辅助防护手段

参数化是核心,但配合以下措施更稳妥:

不复杂但容易忽略:只要所有用户可控的数据都走参数绑定,SQL 注入基本就防住了。关键不是“有没有过滤”,而是“有没有让数据库明确知道哪部分是数据”。