2011-05-12 24 views
0

http://php.about.com/od/finishedphp1/ss/php_login_code_4.htm

我對本教程中三個特定的代碼行非常困惑,在上面列出的頁面上創建了一個登錄頁面和數據庫。

if (!get_magic_quotes_gpc()) { 

     $_POST['email'] = addslashes($_POST['email']); 

    } 

爲什麼她擺弄$ _POST ['email']的價值,當它甚至不是在輸入框?

編輯:

我仍然無法找到郵件的輸入框,我甚至複製並粘貼整個網站。我仍然無法找到一個說電子郵件的框。

+1

必須從某處複製代碼..:D – 2011-05-12 22:25:14

+1

這是從輸入框(閱讀該頁面上的評論,他們說'如果登錄表單被提交')。順便說一下,這是糟糕的代碼。真的很糟糕。 – 2011-05-12 22:26:42

+0

我仍然看不到電子郵件來自哪裏,註冊頁面不使用電子郵件,登錄也不使用電子郵件......有沒有人有更好的主意,以獲得更好的登錄教程? – 2011-05-12 22:37:12

回答

1

首先,內容來自哪裏並不重要。任何用戶提交的內容(即$_GET,$_POST$_COOKIE超級全球中的任何內容)都應視爲不安全。不要認爲用戶可以提交惡意內容的唯一方式就是將其輸入到文本框中。

其次,這段代碼是IMO的啞巴。它基本上說「如果magic quotes已關閉,請執行它們如果正在執行的操作,則通過添加斜槓來避免SQL注入」。這是讓你的代碼工作的懶惰方式。正確的方法是通過使用參數化查詢(例如,使用PDO或mySqli)來構建代碼,以便不必使用魔術引號。

基本上,從這行代碼中,你可以足夠的知道你不應該相信它的其餘部分。

0

email可能是由鏈接到此頁面的另一頁上的表單設置的。至於直接寫_POST,我不認爲它本身有什麼問題,但我認爲它很奇怪,我不喜歡這樣做。事實上,如果啓用了魔術引號並且稍後處理轉義(而不是使用mysql_real_escape_string),我會做相反的操作並剝離斜槓。在處理_POST之前,我會做一些類似$email = $_POST['email']等等的工作,並且只將_POST作爲原始_POST數據。

1

當表格提交時(通過POST),您可以訪問數據服務器端與特殊變量$_POST。表單中的每個項目都將在該數組中索引,並給出其DOM名稱。

所以這裏指的是檢查服務器配置,如果行爲自動向輸入添加斜線(以避免SQL注入),那麼這個動作是由developper執行的。這是爲了避免導致糟糕輸出的雙重縮寫。

參見:super globals,sql injection at owaspmagic quotes

相關問題