2010-04-09 81 views
3

爲什麼在PHP中啓用magic_quotes_gpc被認爲是不好的做法?爲什麼把magic_quotes_gpc視爲一種不好的做法?

+2

嗯..因爲它在PHP6.0中被刪除,並且從PHP5.3開始被棄用了呢? :P – 2010-04-09 20:04:38

+2

@Noah Goodrich:這是一個雞與雞蛋的問題。該功能是否被刪除,因爲開始時是不好的做法?大多數人可能會認爲是。 – 2010-04-09 20:07:08

+0

@Noah Goodrich是「可能」,或者你確定? – 2010-04-09 20:10:06

回答

13

我不認爲我能解釋它比任何PHP本身的製造商更好的(與網頁後續評論):Why not to use Magic Quotes

  • 可移植性:假設它是或熄滅,影響了便攜性。使用get_magic_quotes_gpc()檢查這一點,並相應地編碼。
  • 性能:因爲不是每一個轉義數據都插入到數據庫中,轉義所有這些數據會導致性能損失。只需在運行時調用轉義函數(如addslashes())就更有效。儘管php.ini-development在默認情況下啓用了這些指令,但php.ini-production會禁用它。這個建議主要是由於性能原因。
  • 不便之處:因爲不是所有的數據都需要轉義,所以看到轉義的數據不應該出現的時候通常很煩人。例如,通過電子郵件發送表單,並在電子郵件中看到一堆「\」。要解決這個問題,可能需要過度使用stripslashes()

注意:此功能在PHP 5.3.0和PHP 5.4.0以前已被刪除。

+0

即使將數據_is_插入到數據庫magic \ _quotes \ _gpc/addslashes中也可能無法實現。 – VolkerK 2010-04-09 20:06:28

3

根據文章What is Magic Quotes GPC (magic_quotes_gpc) in PHP and the php.ini?,也有許多缺點:其中表單提交被髮送回瀏覽器必須()與呼叫手動移除的stripslashes斜線

  • 案件。
  • 如果此服務器的魔術引號被關閉,或者代碼被移動到未啓用魔術引號的服務器,則您的腳本將失敗。或者更糟的是,不會立即失敗,只會表現出奇怪的行爲
  • 對提交的變量進行任何字符串操作,即使是簡單的'if'語句都必須考慮到內容中的斜槓變形的可能性。
  • 魔術引號引起開發者的sl。。插入到SQL查詢中的轉義變量(在我看來)是開發人員應該知道並思考的東西。不僅僅是假設一切都是華麗的。
2

因爲有人可以將您的腳本移動到未啓用該選項的服務器,因此在應用程序中立即打開數百個安全漏洞。另外,太多認爲啓用魔術引號會使您的應用程序安全。它不是。您仍然需要檢查並驗證進入應用程序的每一個輸入。即使您沒有報價問題,仍然可能存在跨站點腳本問題等。

即使未來版本的PHP中正在刪除該功能的事實。

1

「Magic Quotes」是PHP手頭持有的嘗試,防止開發人員在不知情的情況下用SQL注入自己的腳步。它棄用PHP 5.3,並且將在PHP被刪除6.

我說,最好是明確和逃生需要轉義,而不是逃避一切並有反轉義的事情,永遠不會被放在什麼數據庫。魔術報價創造了很多(或更多)問題,而不是解決問題,試圖屏蔽那些應該更好地瞭解的人。

http://us3.php.net/manual/en/security.magicquotes.php

2

因爲離開它脫力你寫出更安全的代碼。

如果O'Malley先生在您的網站上註冊,那麼magic_quotes_gpc會將他的姓氏變成O \'Malley,並且當您將其插入到數據庫中時,一切都會好起來的。

問題是,magic_quotes來自addslashes--它不一定會作爲數據庫系統的轉義工作。 O'Malley可能會工作,但也可以規避這種逃跑並執行SQL注入。

如果magic_quotes的都沒有,那麼你會得到字符串奧馬利,這將打破SQL語句像

INSERT INTO users (...) VALUES (...,'O'Malley',...) 

通知的字符串是O.

後真的終止

此外,它更好:例如,如果您要用他的名字發送電子郵件,則必須使用反斜槓 - 沒有理由。如果你不知道,你會收到O'Malley先生的電子郵件。 (當然,對於真正安全的數據庫處理代碼,你會希望使用參數化查詢,因爲這是防止SQL注入的最佳方法,而且如果你參數化,你不需要斜槓,並且這是浪費時間讓PHP添加它們。)

0

很容易的問題。
想象一下,你想通過電子郵件發送用戶的數據。或者將cookie中的用戶名插入到表單輸入中。你覺得像鮑勃「布法羅」比爾這樣的名字會是個好主意嗎?我不這麼認爲

相關問題