1

可以使用 WAF 阻止普通的基于 UNION 的 SQL 注入,该 WAF 过滤关键字,如UNION, SELECT. 但我认为它可以被 SQL 的内联注释语句绕过,例如/*!UNION*//*!SELECT*/

评论声明仅用于阅读目的,对吗?如果是这样,SQL 服务器如何读取注释中的注入查询并执行它?

4

3 回答 3

1

使用 WAF 过滤关键字是没有意义的。它不可能成功。看看这个绕过它的方法列表:http: //ferruh.mavituna.com/sql-injection-cheatsheet-oku/(我用谷歌在几秒钟内就找到了这个链接。)

如果代码编写正确,则没有必要。

至于您的问题,MySQL 的/*!语法是针对 MySQL 特定命令的。它旨在让您能够编写可移植的 SQL(可以在任何数据库上运行),但仍然能够发送 MySQL 特殊命令。

于 2012-09-13T05:43:39.567 回答
0

如果您使用支持数据占位符的数据库驱动程序,SQL 注入根本不应该成为问题。你试图用事后检测做的事情是徒劳的,就像试图用破烂的苍蝇拍根除蟑螂一样。你不可能全部得到它们。

最佳实践是首先确保不可能将恶意数据注入到您的查询中。Booby Tables 上有许多示例说明如何正确执行此操作。

于 2012-09-13T05:52:19.153 回答
0

通过不关闭它们来注释掉部分查询可用于绕过黑名单、删除空格、混淆和确定数据库版本。

您提到的是 MySQL 的一种特殊注释语法。如果您将代码放入此注释中,它将仅在 MySQL 中执行。只有当服务器高于提供的版本时,您也可以使用它来执行一些代码。例如:

经典的内联注释 SQL 注入攻击示例

ID: /*!32302 10*/
ID: 10 

如果 MySQL 版本高于 3.23.02,您将得到相同的响应

于 2020-11-01T20:52:17.450 回答