2010-11-02 106 views
1

我們的網站使用PHP版本5.2.14在PHP中使用get_magic_quotes_gpc版本5.2.14或同等PHP版本6

最近我們的託管服務提供商可能改變魔術引號defenition,我想出了建議的解決方案[代碼波紋管]

  1. 此解決方案適用於PHP版本5.2.14嗎?
  2. 當我們升級到PHP版本6時應該更改什麼?
// Code: 

function fHandleQuotes($s) { 
    if (get_magic_quotes_gpc()) 
    return ($s); 
    return (addslashes($s)); 
} 

. . . 
// Usage: 

. . . 
$query = "UPDATE myTable SET myField = '" . fHandleQuotes($_POST['fieldName']) . "'"; 
. . . 
+0

remove'return(addslashes($ s));'你將會是o.k.並且不要忘記正確處理SQL查詢的數據。 – 2010-11-02 12:43:16

+0

爲什麼我應該刪除「返回」? – Atara 2010-11-02 12:58:22

+0

,因爲addslashes在這裏沒有用處。應該有數據庫特定的操作,而不是輸入特定數據 – 2010-11-02 15:17:11

回答

2

在PHP 6中,magic_quotes將被刪除!
現在你可以使用這個功能。

if( (function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) || ini_get('magic_quotes_sybase') ){ 
    foreach($_GET as $k => $v) $_GET[$k] = stripslashes($v); 
    foreach($_POST as $k => $v) $_POST[$k] = stripslashes($v); 
    foreach($_COOKIE as $k => $v) $_COOKIE[$k] = stripslashes($v); 
} 
+0

謝謝,我將添加「function_exists()」。但是PHP 6中的等效代碼是什麼? – Atara 2010-11-02 13:00:19

+0

在PHP 6中,這段代碼沒有意義。魔術引號將被刪除。他們將被關閉。 – pltvs 2010-11-02 13:12:45

+0

這有點舊,但是...這段代碼是不正確的。當magic_quotes_gpc被啓用時,'magic_quotes_sybase'只會覆蓋'magic_quotes_gpc'轉義方法。當'magic_quotes_gpc'沒有啓用時,'magic_quotes_sybase'在這方面沒有效果。因此,您應該只檢查是否啓用了「magic_quotes_gpc」,而不是是否啓用了「magic_quotes_sybase」。 (如果啓用'magic_quotes_sybase'並且'magic_quotes_gpc'不是,則GET/POST/COOKIE數據不會自動轉義。) – MrWhite 2015-05-06 09:18:43

1

閱讀本,爲什麼你不應該使用魔術引號:
http://php.net/manual/en/security.magicquotes.disabling.php

使用該網頁上的例子之一,並與addslashes取代stripslashes。但是,您的解決方案可能有效。儘管在啓動時只需使用$_GET = array_map("addslashes", $_GET);就會更快並且不那麼容易侵入。更好的是在其上使用mysql_real_escape_string而不是addslashes。 (但是你的數據庫連接必須已經建立,才能正常工作)。

另外我想推薦你這個:http://sourceforge.net/p/php7framework/wiki/input/ - 因爲它允許你漸進地改寫你的應用程序使用$_GET->q["fieldName"](不太安全)magic引用的字段,或簡單$_POST->sql["fieldName"](更安全)的編碼字段。
您甚至可以使用$_REQUEST->sql->always()爲所有正常的$_REQUEST["fieldName"]訪問啓用默認過濾器。雖然這可能是一些應用程序的矯枉過正。

+0

另一種magic_quotes,呃? -1 – 2010-11-02 12:44:22

+0

@Col。彈片:是的,但不完全。它並不妨礙使用最笨的可能的過濾器。但它使用特定於上下文的更合適的過濾器來減輕*。 – mario 2010-11-02 12:52:01