0

php 5.2之前用过。现在我想升级php 5.4.魔术引号现在被删除了。我想让我的应用程序正常工作。我应该使用哪个函数来转义数据mysql_real_escape_string()addslashes()

上面哪个函数会给出与设置相同的结果magic_quotes_gpc

4

5 回答 5

2

最好迁移到上面@alex 概述的 PDO 和准备好的语句。

如果这不可行,请使用 绝对转义传入的字符串数据mysql_real_escape_string(),并验证整数数据,例如使用此答案filter_input()中所示的方法。

addslashes() 不是适用于 mySQL 查询的转义方法。

于 2013-06-19T07:41:40.520 回答
1

出于安全原因,最好使用此处建议的准备好的语句。Mysql_real_escape_string 可能不足以防止 sql 注入,例如,尽管有转义函数 (),但仍可能滥用多字节字符集。mysql_real_escape_string() 与 Prepared Statements

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

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

有关 PHP 中准备好的语句的更多信息。所以总而言之,如果您有可能将您的应用程序更改为准备好的语句,那将是最好的处理方式。

更新(完全不推荐)

如果您真的想保留状态,请对每个 $GET 和 $POST 变量使用 addlashes()。它手动执行的操作与打开的 magic_quotes 对所有 $GET 和 $POST 变量所做的相同。但我真的猜想将 mysqli 与 mysqli_real_escape_string 或更好的准备好的语句一起使用会减少工作量:)

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

于 2013-06-19T07:37:28.627 回答
1

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

代码:

    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;
            }
    }
于 2013-06-19T12:18:32.220 回答
0

addslashes()给出与从Magic Quotesmagic_quotes_gpc中设置引用相同的结果。

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


在 PHP 5.4 以上使用 magic_quotes_gpc

如果您仍然想magic_quotes_gpc在 PHP 5.4 或更高版本上运行您的遗留代码,您可以使用yidas/magic-quotes

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

于 2017-07-13T01:34:23.863 回答
0

我们需要在 Request、Post、Get 和 cookie 中添加斜杠。您可以在下面的代码中实现它。在您的公用文件中包含以下代码。

$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);   
}
于 2018-02-23T11:36:32.630 回答