避免MySQL注入取代单引号和双引号

时间:2012-03-23 09:57:28

标签: php mysql code-injection

来消毒用户输入我们通常使用mysql_real_escape_string,但是例如,如果我想逃避:O'Brian它会返回O \'Brian而我真的不喜欢这个因为如果我想打印这个名字,我有剥离slasheseveryverytime。 所以我想用这个函数:

$search = array("'", '"');
$replace = array("´", "“");
$str_clean = str_replace($search, $replace, "O'Brian");

这个简单的功能是否可以保护我免受MySQL注入攻击? 非常感谢,抱歉我的英语不好。

4 个答案:

答案 0 :(得分:3)

不 - 不再逃避!

使用mysqliPDO和准备好的陈述

http://php.net/manual/en/mysqli.prepare.php

http://php.net/manual/en/pdo.prepared-statements.php

答案 1 :(得分:2)

mysql_real_escape_string确实仅为字符串转义添加\,并且不会将它们添加到数据库中,因此您在显示内容时不必使用stripslashes。

如果您确实将\存储在数据库中,请执行off magic_quote

答案 2 :(得分:2)

您应始终使用mysql_real_escape_string来逃避输入。当您值写入数据库时​​,而不是当您从数据库中读取值时。当您将“O \'Brian”写入数据库时​​,它会被存储为“O'Brian”,当您将其读回时,您还应该获得“O'Brian”(并且不需要删除斜线,因为它们不存在)。

答案 3 :(得分:1)

是的,显然它可以防止SQL Injection攻击

它会在unescaped_string中转义特殊字符,并考虑到连接的当前字符集,以便将其放在mysql_query()中是安全的。