2017-03-12 40 views
0

我有一個關於註釋sql查詢的問題。 SQL查詢具有形成
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
所以我嘗試1' or 1=1; #,我讓所有的用戶和密碼如我所料,但是當我使用--上發表評論,而不是#我得到一個語法錯誤。爲什麼會發生?
你能解釋一下在每種情況下sql是如何形成的?
另外我注意到1' or 1=1 #也可以。 #符號不會註釋掉; ?DVWA sql注入

回答

2

正如你在讀mysql manual

在MySQL中, - (雙破折號)註釋風格要求的第二個短線應遵循由至少一個空格或控制字符(如空格,製表符,換行符,等等)

當添加僅--到您輸入...有以下沒有空格或控制字符。你合成的查詢將看起來像:

SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1--'; 

正如你可以看到,雙破折號立即由;,因爲它不被視爲一個評論,這導致一個語法錯誤,隨後

嘗試結束

投入--(後面有個空格)對於;:這是沒有必要在向服務器發出一個查詢。這是只有來分隔不同的陳述,但是根本不需要單個陳述。

mysql命令行客戶端不會將該字符發送到服務器,而是將其視爲「執行指令」。