我使用的是mysqli预准备语句。我是否应该仍然使用如下函数来清理用户输入:
function sanitise($string){
$string = strip_tags($string); // Remove HTML
$string = htmlspecialchars($string); // Convert characters
$string = trim(rtrim(ltrim($string))); // Remove spaces
$string = mysql_real_escape_string($string); // Prevent SQL Injection
return $string;
}谢谢。
发布于 2011-03-09 08:27:49
不是的!不是也不是。如果您已经在使用预准备语句,MySQL需要查看该值,而不是它的某个转义版本。如果您将mysql_real_escape_string添加到一个字符串中,并将该设置为预准备语句的值,那么您就丢弃了它,例如,引号被加倍了!
现在,至于清理数据,这完全取决于业务规则,即什么是有效输入,什么是无效输入。在您的示例中,strip_tags更多地是关于html->raw (格式)转换,而不是卫生设施。rtrim(ltrim也是如此--这是一次业务转型。
发布于 2011-03-09 08:25:56
是的。当你使用预准备语句时,你是安全的,不会被mysql注入,但是仍然可能有特殊的字符,带标签或者空格,所以你仍然需要注意这些。
请参阅PHP: Is mysql_real_escape_string sufficient for cleaning user input?
更新:
您可以安全地避免mysql注入,所以您不应该使用real_mysql_scape_string或任何引号。
发布于 2011-03-09 08:26:24
准备好的语句是为了防止您的查询表单被恶意输入破坏。但是有大量的恶意内容在SQL查询中是完全可以接受的,但在稍后重新显示时会攻击浏览器。
对进入预准备语句的数据执行mysql_real_escape_string通常是多余的(也有例外,但它们是特殊情况)。
https://stackoverflow.com/questions/5240014
复制相似问题