我有一个关于注释掉SQL查询的问题。
sql查询的格式为$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
所以我尝试了1' or 1=1; #
,我得到了所有用户和密码,但是当我使用--
代替#
时,我收到语法错误。为什么会这样?
你能解释一下sql在每种情况下是如何形成的吗?
我也注意到1' or 1=1 #
也有效。 #符号没有注释掉; ?
答案 0 :(得分:2)
您可以阅读mysql manual:
在MySQL中, - (双破折号)注释样式要求第二个破折号后跟至少一个空格或控制字符(例如空格,制表符,换行符等)
仅在输入中添加--
时,后面没有空格或控制字符。您的综合查询将如下所示:
SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1--';
正如您所见,;
后面的会立即 ,这会导致语法错误,因为它不被视为评论。
尝试在结尾处放入--
(尾随空格)
对于;
:在向服务器发出的查询中没有必要。这只是 来分隔不同的语句,但根本不需要单个语句。
mysql命令行客户端不会将该字符发送到服务器,而是将其视为"执行指令"。