我听说sprintf()可以防止SQL注入。是真的吗?如果是这样的话,是怎么做的?
为什么人们推荐写这样的查询:
$sql = sprintf('SELECT * FROM TABLE WHERE COL1 = %s AND COL2 = %s',$col1,$col2);发布于 2011-07-11 15:03:42
sprintf不会保护你!它只是取代了%s
您必须mysql_real_escape_string so:
$sql = sprintf('SELECT * FROM TABLE WHERE COL1 = "%s" AND COL2 = "%s"',
mysql_real_escape_string($col1),
mysql_real_escape_string($col2));是更安全的注射
注意:我建议您看看PDO,它是我喜欢用于DBconections和查询的工具
发布于 2011-07-11 15:01:11
这不会有任何保护作用。使用sprintf使代码更具可读性,然后在字符串中插入和删除,以便在每个变量…上运行mysql_real_escape_string但是,该示例不会逃脱最后的变量,因此失去了优势。
如果你想要像样的保护,使用提供bound parameters的东西。
发布于 2011-07-11 15:04:32
使用sprintf可以防止数值字段的SQL注入:
$sql = sprintf("SELECT * FROM table WHERE col1 = %i", $col1);通过以这种方式使用$col1,您可以确保将sprintf转换为整数--尽管如果它不是真正的整数,它可能会生成错误或警告。
防止SQL注入的正确方法是检查所有输入值,然后进行转义。但这在其他问题中涉及得更透彻,所以我不会在这里详细介绍。
https://stackoverflow.com/questions/6646731
复制相似问题