首页 > 解决方案 > sql注入。“'OR 1=1 #”和“'OR 1=1 --”有什么区别?

问题描述

sql注入方法有几个版本,但我不知道为什么会有细微的差别。我怎么知道环境之间的区别?

标签: sql-injection

解决方案


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 支持该语法。


推荐阅读