php 5.4 magic_quotes_gpc另类?

时间:2013-06-19 07:30:30

标签: php

我之前使用的是php 5.2。现在我要升级php 5.4.现在已删除魔术引号。我想让我的应用程序正常工作。我应该使用哪种功能来转发数据mysql_real_escape_string()addslashes()

上面的哪个函数会给出与magic_quotes_gpc设置??

相同的结果

5 个答案:

答案 0 :(得分:2)

最好是按照@alex上面的概述迁移到PDO和预备语句。

如果这不可行,则绝对使用mysql_real_escape_string()转义传入的字符串数据,并验证整数数据,例如使用filter_input()

中显示的addslashes()

{{1}}不适合mySQL查询的转义方法。

答案 1 :(得分:1)

出于安全原因,最好使用建议的here语句。 Mysql_real_escape_string可能不足以阻止sql注入,例如因为尽管有转义函数()。mysql_real_escape_string() versus Prepared Statements

,但多字节字符集可能会被滥用

PHP中的预处理语句可以像这样使用:

  $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
  $stmt->bindParam(1, $name);
  $stmt->bindParam(2, $value);

More information on prepared statements in PHP。总而言之,如果您有可能将应用程序更改为准备好的语句,那么这将是最好的处理方式。

更新(完全不推荐)

如果你真的想要保持状态,请为每个$ GET和$ POST变量使用addslashes()。它可以手动完成所有$ GET和$ POST变量所启用的magic_quotes。但我真的猜测使用mysqli与mysqli_real_escape_string或更好的准备语句的工作较少:)

http://php.net/manual/de/function.addslashes.php

答案 2 :(得分:1)

因为我不能在我的应用程序上引入db层而且我想要一个快速的解决方案,所以我使用了addslashes()函数,因为addslashes()转义单引号('),双引号(“),反斜杠()和NUL( NULL byte)究竟是什么魔术引号逃脱。

代码:

    foreach (array('_COOKIE','_GET', '_POST') as $_SG) {
            foreach ($$_SG as $_SGK => $_SGV) {
                    $$_SGK = smartQuotes($_SGV);
            }
    }


    function smartQuotes($value)
    {
            if( is_array($value) ) {
                    return array_map("smartQuotes", $value);
            } else {
                    if( $value == '' ) {
                            $value = 'NULL';
                    } if( !is_numeric($value)) {
                            $value = addslashes($value);
                    }
                    return $value;
            }
    }

答案 3 :(得分:0)

addslashes()提供的结果与从Magic Quotes引用的magic_quotes_gpc设置相同。

  

启用时,所有'(单引号),'(双引号),\(反斜杠)和NULL字符都会自动转义为反斜杠。这与addslashes()的作用相同。

在PHP 5.4上面使用magic_quotes_gpc

如果您仍希望在旧版代码的PHP 5.4或更高版本上运行magic_quotes_gpc,则可以使用yidas/magic-quotes

  

https://github.com/yidas/php-magic-quotes

答案 4 :(得分:0)

我们需要在Request,Post,Get&曲奇饼。你可以在代码下面实现它。包含在公共文件中的代码下方。

$la_magicQuotes = array('_REQUEST','_POST', '_GET','_COOKIE');
  foreach($la_magicQuotes as $la_superGlobal )
  { 
    if($$la_superGlobal && is_array($$la_superGlobal))    
      array_walk($$la_superGlobal, 'pr_addslashed_array');
  }


function pr_addslashed_array(&$la_val,$lc_key) 
{  
  if (is_array($la_val))
    array_walk($la_val,'pr_addslashed_array');
  else
    $la_val = pr_addslashed($la_val);   
}

function pr_addslashed($lc_string)
{
  return $lc_string = addslashes($lc_string);   
}