2010-04-22 33 views
1

如果我打開magic_quotes並且使用mysql_real_escape_string,字符串是否會被雙重轉義?會造成問題嗎?使用magic_quotes()會影響mysql_real_escape_string()的使用

我假設是基於get_magic_quotes()函數,但只是尋求確認。

(PS它很容易問這個問題不是在我的辦公室的所有安全測試,我們在的地方 - 我花了10-15的一切配置,以獲得一個可用的環境)

回答

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 '功能' 一些其他的選擇。

+0

函數ini_set( 'magic_quotes_gpc的',0)中的一個; - 有趣的一個:) – 2010-04-22 06:16:19

+0

爲什麼不使用通常的array_map_recursive? – 2010-04-22 06:18:56

+0

我對斜槓一無所知......我只發現15分鐘前有什麼magic_quotes ...我試圖瞭解更多一切...... – sjw 2010-04-22 06:26:32

4

閱讀documentation of mysql_real_escape_string(我希望這不是困難以及):

注:如果magic_quotes_gpc啓用,先申請stripslashes()的數據。對已經被轉義的數據使用這個函數會將數據轉移兩次。

+0

如果我閱讀文檔,那麼你將不會有任何人在這些論壇貶低,讓你感覺更好的自己... – sjw 2010-04-22 06:25:42

+6

我希望有一種可能downvote評論。 – 2010-04-22 06:30:05

+0

@Col。彈片 - 好吧,也許是通過代理。我剛剛提出了你的評論。 – 2010-04-22 06:33:31

0

如果我已經magic_quotes的接通和 我用mysql_real_escape_string,將 的特林是雙逃脫?

是的,它會,但你可以做這樣的事情,雖然:

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

注:您可以從php.ini中禁用魔術引號或使用下面的函數來覆蓋它:

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

最後一段代碼片段有什麼用? – 2010-04-22 06:20:55

+0

@Col。彈片 - 也許會產生一個錯誤? :) – gnarf 2010-04-22 07:02:01

+0

@Col。 Shrapnel:這將覆蓋默認函數,所以'get_magic_quotes_gpc()'不會做它的功能。 – Sarfraz 2010-04-22 07:11:00

1

當然,最簡單的方法是關閉magic_quotes。
wuth通常PHP/Apache的配置,這條線

php_flag magic_quotes_gpc 0 

.htaccess文件會做的事。

但是爲了兼容性的目的,一個函數也可以用在某個配置文件中。

if (get_magic_quotes_gpc()) { 
    $_GET = array_map_recursive('stripslashes', $_GET) ; 
    $_POST = array_map_recursive('stripslashes', $_POST) ; 
    $_COOKIE = array_map_recursive('stripslashes', $_COOKIE) ; 
    $_REQUEST = array_map_recursive('stripslashes', $_REQUEST) ; 
    if (isset($_SERVER['PHP_AUTH_USER'])) stripslashes($_SERVER['PHP_AUTH_USER']); 
    if (isset($_SERVER['PHP_AUTH_PW'])) stripslashes($_SERVER['PHP_AUTH_PW']); 
} 

最簡單

相關問題