通过 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"。
我有一个关于注释掉 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"。