SQL注入注释无法正常工作?

时间:2020-03-08 15:24:25

标签: sql comments sql-injection

以下命令不管密码如何都允许成功登录:

SELECT * FROM users WHERE username = 'eve'-- and password = 'asdasdasd';

因为它会忽略“-”之后的所有内容

但是以下命令没有:

SELECT * FROM users WHERE username = 'eve'--' and password = 'asdasdasd';

由于多余的撇号,由于某些原因,使用以下SQL命令生成的sql注入时:

"SELECT * FROM users WHERE username = '" + username + "' and password = '" + password + "';"

并使用以下输入:
用户名:eve'-
密码:asdasdasd


为什么要关心注释运算符后面是否有单个撇号??? 正确的输入是什么,它将忽略其余的输入?

谢谢

1 个答案:

答案 0 :(得分:0)

至少在MySQL中,--字符后必须有一个空格。

https://dev.mysql.com/doc/refman/8.0/en/ansi-diff-comments.html说:

标准SQL使用“-”作为开始注释序列。 MySQL服务器使用# 作为开始注释字符。 MySQL Server还支持--注释样式的变体。也就是说,--开始注释序列必须 后面跟一个空格(或控制字符,例如换行符)。 需要该空间以防止自动生成问题 使用以下结构的SQL查询,其中 自动插入付款金额:

UPDATE account SET credit=credit-payment 

考虑发生了什么 如果付款为负值,例如-1:

UPDATE account SET credit=credit--1 

credit--1是中的有效表达式 SQL,但是--被解释为注释的开始,是注释的一部分 表达式被丢弃。结果是一个具有 完全不同于预期的含义:

UPDATE account SET credit=credit 

该语句在 价值。这说明允许注释以 --可能会造成严重后果。

相关问题