使用magic_quotes()会影响mysql_real_escape_string()的使用吗?

时间:2010-04-22 05:55:36

标签: php mysql mysql-real-escape-string magic-quotes

如果我已启用magic_quotes并使用mysql_real_escape_string,那么该字符串是否会被双重转义?它会引起问题吗?

我假设基于get_magic_quotes()函数,但只是寻求确认。

(P.S。提问这个问题比在我的办公室测试它更容易,我们已经拥有了所有的安全性 - 我需要10-15个配置才能获得可用的环境)

4 个答案:

答案 0 :(得分:4)

阅读documentation of mysql_real_escape_string(我希望这也不困难):

  

注意:如果启用了magic_quotes_gpc,请先将stripslashes()应用于数据。对已经转义的数据使用此函数将两次转义数据。

答案 1 :(得分:3)

如果你转义从get / post / cookie输入中获得的值,它已经应用了addslashes(),所以将它传递给mysql_real_escape_string()实际上是双引号。

剥离em:

if (get_magic_quotes_gpc())
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
    ini_set('magic_quotes_gpc', 0);
}

This question还有一些其他选项可以删除引号/处理可怕的magic_quotes_gpc PHP'功能'。

答案 2 :(得分:1)

当然,最简单的方法是关闭magic_quotes wuth通常是PHP / Apache配置,这一行

php_flag magic_quotes_gpc 0
<{1}}文件中的

会做的事情。

但出于兼容性目的,也可以在某些配置文件中使用函数。

.htaccess

最简单的一个

答案 3 :(得分:0)

  

如果我启用了magic_quotes并且   我使用mysql_real_escape_string,将   tring是双重逃脱?

是的,它会,但你可以做这样的事情:

if (get_magic_quotes_gpc())
{
  $escaped = stripslashes($your_vars);
}

注意:您可以禁用PHP.ini中的魔术引号或使用以下函数覆盖它:

// no more magic quotes
function get_magic_quotes_gpc()
{ 
  return false;
}