簡體   English   中英

PHP 5.4 magic_quotes_gpc替代?

[英]php 5.4 magic_quotes_gpc alternative?

我之前使用的是php 5.2 現在我想升級php 5.4. 魔術引號現在已刪除。 我想讓我的應用程序正常工作。 我應該使用哪個函數來轉義數據mysql_real_escape_string()addslashes()

上面的哪個函數將提供與magic_quotes_gpc設置相同的結果?

最好總是遷移到PDO和上面@alex概述的准備好的語句。

如果那不可行,請使用mysql_real_escape_string()絕對轉義傳入的字符串數據,並驗證整數數據,例如,如本答案所示,使用filter_input()

對於MySQL查詢, addslashes()不是合適的轉義方法。

出於安全原因,最好使用此處建議的准備好的語句。 Mysql_real_escape_string可能不是suffiecient防止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中准備好的語句的更多信息 因此,總而言之,如果您有可能將應用程序更改為准備好的語句,那將是最好的處理方式。

UPDATE(完全不推薦)

如果您確實想保留狀態,則對每個$ GET和$ POST變量使用addlashes()。 它手動執行的操作與對$ GET和$ POST變量打開的magic_quotes所做的相同。 但是我真的猜測將mysqli與mysqli_real_escape_string或更好的,准備好的語句一起使用的工作較少:)

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

因為無法在應用程序上引入db層,並且需要快速解決方案,所以我使用了adslashes()函數,因為addslashes()會轉義單引號('),雙引號(“),反斜杠()和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;
            }
    }

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

我們需要在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);   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM