2010-04-29 21 views
10

我一直都在讀魔術引號不會阻止SQL注入,但我無法理解爲什麼不能!舉個例子,假設我們有以下查詢:儘管PHP魔法引號成功的SQL注入

SELECT * FROM tablename 
    WHERE email='$x'; 

現在,如果用戶輸入使得$x=' OR 1=1 --,查詢將是:

SELECT * FROM tablename 
    WHERE email='\' OR 1=1 --'; 

反斜槓將通過魔術被添加行情沒有任何損害!

有沒有一種方法,我沒有看到用戶可以繞過這裏的魔術引用插入的位置?

回答

21

訣竅通常是傳遞一個二進制值,以便反斜槓將成爲有效多字節字符的一部分。這是關於它的blog post

+0

我總是有這樣的印象:SQL注入是一個更嚴重的問題,可能會影響腳本中幾乎所有的新手嘗試。我仍然無法相信,除非你使用了多字節字符集,否則魔術語句會讓你絕對安全。 – 2011-04-18 13:55:49