2017-03-12 108 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命令行客户端不会将该字符发送到服务器,而是将其视为“执行指令”。