2010-01-22 74 views
10

我完全意識到PHP中Magic Quotes的畸變,它是如何邪惡的,我避免它們像蟲一樣,但是什麼是magic_quotes_runtime?來自php.ini:什麼是PHP中的魔術引號運行時?

運行時生成的 數據的魔術引號,例如從SQL數據,從EXEC(), 等

是是我應該檢查是否和關閉有:

set_magic_quotes_runtime(false); 

是不是經常在缺省情況下?我知道它已在5.3.0中被棄用,並在6.0.0中被刪除,但由於我的腳本支持5.1.0+,我想知道如何在「傳統」PHP(如果相關)中處理這個問題。

編輯:爲了說清楚我想退出('關閉魔術引號');當魔術引號打開時。我不依賴他們!

回答

6

如果啓用了magic_quotes_runtime,那麼大多數從任何外部源(包括數據庫和文本文件)返回數據的函數都將引號用反斜槓轉義。如果magic_quotes_sybase也處於打開狀態,則單引號將使用單引號而不是反斜線進行轉義。

http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-runtime

+0

如果鏈接包含答案,爲什麼不只是寫鏈接? – mck89 2010-01-22 16:07:58

+7

@ mck89因爲它需要用戶搜索解決方案,並且鏈接可能會更改,但在此處發佈的文本不會。 (-1刪除) – Sampson 2010-01-22 16:12:49

+0

好吧你說服我,這是一個很好的動機:) – mck89 2010-01-22 16:14:50

0

你可以使用ini_get來檢查它的價值,就像這樣:

ini_get('magic_quotes_runtime'); 

你也應該換調用set_magic_quotes_runtime/get_magic_quotes_runtime在function_exists調用,這樣的:

if (function_exists('set_magic_quotes_runtime')) { 
set_magic_quotes_runtime(true/false); 
} 

但是,當然,不應該依賴魔術引號,sh如果可能的話應該禁用它們。 Se這個鏈接的原因是:http://www.php.net/manual/en/security.magicquotes.whynot.php

0

如果魔術引號爲ON,php會自動轉義來自POST或GET變量的引號,並在從數據庫中提取數據時自動將它們轉義出來。

如果使用帶有魔術引號的東西像addslashes(),mysql_escape_string()或mysql_real_escape_string(),則最終會出現雙轉義引號。

它是邪惡的原因是相同的原因addslashes()和mysql_escape_string()是邪惡的 - 因爲它沒有捕獲每一個可能的方法在字符串中的報價。它給你一種錯誤的安全感,認爲在現實中你不需要擔心逃脫引號。

另外,就好像轉義字符串已經不足PITA了,現在您必須在嘗試轉義或取消轉義字符串以避免雙轉義之前檢查魔術引號是打開還是關閉。

+1

不問什麼「魔術語錄」是我太瞭解的。我在問什麼是「magic_quotes_runtime」?哪些數據通過此設置轉義? – AlexV 2010-01-22 16:14:05

+0

@AlexV - 兩個設置協同工作。 GPC一個用於POST,GET和COOKIE數據,運行時用於或多或少的一切(文件,mysql等)。如果你的問題是「究竟是什麼'其他'?」那麼alexb在他的鏈接中有答案。 – 2010-01-22 16:21:41

+0

這是mck89鏈接不是alexb一:) – AlexV 2010-01-22 18:24:59