该手册似乎建议在数字周围使用引号足以防止 SQL 注入。
根据第5.3.1 节。MySQL 5.1 参考手册的一般安全指南:
如果应用程序生成查询,例如
SELECT * FROM table WHERE ID=234
当用户输入值234
时,用户可以输入值234 OR 1=1
以使应用程序生成查询SELECT * FROM table WHERE ID=234 OR 1=1
。结果,服务器检索表中的每一行。这会暴露每一行并导致过多的服务器负载。防止此类攻击的最简单方法是在数字常量周围使用单引号:SELECT * FROM table WHERE ID='234'
. 如果用户输入额外的信息,它们都将成为字符串的一部分。在数字上下文中,MySQL 自动将此字符串转换为数字并从中删除任何尾随的非数字字符。
这是否意味着如果用户输入值,用户就会受到保护234' OR 1=1 #
?(即生成查询SELECT * FROM table WHERE ID='234' OR 1=1 #'
)