有几种版本的sql注入方法,但是我不知道为什么会有一些确切的区别。 我如何知道环境之间的差异?
答案 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