sql-injection - sql注入。“'OR 1=1 #”和“'OR 1=1 --”有什么区别?
问题描述
sql注入方法有几个版本,但我不知道为什么会有细微的差别。我怎么知道环境之间的区别?
解决方案
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 支持该语法。
推荐阅读
- php - 如何在没有 if 语句的情况下打印奇数/偶数系列
- python - 为什么我收到 RuntimeError:生成器引发了 StopIteration?以及如何解决?
- python - 如何在 Databricks 上绘制 Python XGBdecision 树
- bootstrap-4 - 如果从一开始就看不到,这里的地图将不会显示
- javascript - Sweet Alert 没有显示动态值,我做错了什么?
- json - 如何使用公共密钥合并和附加两个 json 文件而不丢失其他数据
- c# - 如何在 WPF 中的 MaterialDesign:PackIcon 中使用点击事件?
- node.js - 是否可以在 nodeJS 中将两个或多个对象链接在一起?
- javascript - 为什么我要在一小时内在 youtube api 上运行我的每日配额?
- asp.net - Asp.Net Core - 防止相同域应用程序之间的会话 cookie 冲突