sql注入。 “'OR 1 = 1#”和“'OR 1 = 1-”有什么区别?

时间:2018-09-02 07:00:42

标签: sql-injection

有几种版本的sql注入方法,但是我不知道为什么会有一些确切的区别。 我如何知道环境之间的差异?

2 个答案:

答案 0 :(得分:2)

TL; DR-#格式仅在MySQL上可用。 --表单可在任何品牌的SQL上使用。

#--均用于引入注释。在SQL注入攻击中,两者的目的都是确保忽略其余部分。

SELECT * FROM MyTable WHERE name = '$unsafe_variable' AND id = 12345

SQL注入攻击可能能够干扰$unsafe_variable,但查询仍将限于具有特定id的一行。但是,如果SQL注入攻击可以有效地抵消第二个术语怎么办?

SELECT * FROM MyTable WHERE name = '' OR 1=1 -- ' AND id = 12345
                                    ^^^^^^^^^^^^

--之后的所有内容都是注释,因此查询将忽略它。注释包含看起来像更多SQL语法的内容都没关系。

--是标准ANSI SQL指定的唯一注释语法,所有SQL实现都应支持此语法。

但是,即使不是全部,大多数SQL实现也支持其他注释语法,因为开发人员对使用它更加熟悉。尤其是/* comment */语法,因为它允许多行注释,并且许多其他编程语言都支持它。

我检查过的所有SQL品牌都支持-- comment/* comment */

# comment语法仅受MySQL支持。

{ comment }语法仅受Informix支持。

答案 1 :(得分:1)

因为数据库引擎之间的语法是不同的,所以“ OR 1 = 1#” 可以与mysql DB一起使用,因为注释使用的是” OR 1 = 1 —” 与sql服务器BD配合使用,因为请使用-注释,以获取有关sql注入方法示例的更多详细信息,请检查此link