通过 sql 注入

DVWA sql injection

我有一个关于注释掉 sql 查询的问题。 sql 查询的形式为
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
所以我尝试 1' or 1=1; # 并按预期获得了所有用户和密码,但是当我使用 -- 而不是 # 进行评论时,我收到语法错误。为什么会这样?
您能解释一下 sql 在每种情况下是如何形成的吗?
我还注意到 1' or 1=1 # 也有效。 # 符号没有注释掉 ; ?

如您在 mysql manual 中所读:

In MySQL, the -- (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on)

当仅向您的输入添加 -- 时...后面没有空格或控制字符。您的综合查询如下所示:

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

如您所见,双破折号 紧接着 后跟一个 ;,这会导致语法错误,因为它不被视为注释。

尝试在末尾加入 --(尾随空格)

对于;:没有必要在向服务器发出查询。这 用于分隔不同的语句,但根本不需要单个语句。

mysql 命令行客户端不会将该字符发送到服务器,而是将其视为 "execution instruction"。