防火墙检测到 SQL 注入,用于作为文本提交以供存储的 SQL 代码

SQL Injection Detected By Firewall For SQL Code Submitted As Text For Storage

提问人:TekkGuy 提问时间:12/12/2022 最后编辑:TekkGuy 更新时间:4/17/2023 访问量:199

问:

我这里有一个挠头的问题。一年多前,我写了一个网站功能/表单,我可以在其中提交未执行但存储在表中的 SQL 代码。这个功能在我创建它时就起作用了,因为我能够将几个脚本上传到数据库中。我已经几个月不需要使用此功能了,最近对我的网站的升级让我重新检查了功能。该功能停止工作...经过一番研究,确定我们公司的防火墙现在由于检测到“SQL注入”而阻止了表单的提交。

他们发誓没有对防火墙进行任何更改,但是,这似乎不太可能,因为此功能以前运行过。无论。。。我的困惑是,我知道许多网站,比如这个网站,允许人们使用 Web 表单界面发布“代码”,而不会被标记为 SQL 注入。我敢肯定网站(像这个网站)也有防火墙保护它们。

在页面提交/回发上传输代码以清除防火墙的 SQL 注入检查时,是否需要执行某些操作?

澄清一下......

有一个带有 LargeTextArea 控件的窗体,其中输入了 SQL 脚本。此 SQL 代码通过回发传输到服务器,服务器端代码处理将脚本保存到表中。与我假设的这个网站(StackOverflow)非常相似。我们可以在这里发布代码,而不会被防火墙拦截和阻止。我们在消息中发布的代码最终存储在服务器上的数据库中。这与我正在执行的行为相同。

由于防火墙在客户端浏览器和 Web 服务器之间进行干预,因此回发永远不会完成。因此,服务器从不接收回发数据来执行任何处理。客户端浏览器仅收到“连接重置”错误。

我一直认为SQL注入应该由服务器端处理......程序员有责任确保它不被滥用。在到达服务器之前让防火墙进行干扰,并执行代码以检查SQL注入...我觉得不对劲。即使您有阻止 SQL 注入的代码,防火墙是否在任何服务器端逻辑之前拦截和干预也无关紧要。我错了吗?

更新(2023 年 4 月 17 日): 任何阅读本文的人的最终解决方案......是没有解决办法。当出现控制防火墙的另一个部门制定阻止通信的“规则”的情况时,老实说,没有什么可以做的。防火墙干扰了整个过程,并将决策权从程序员手中夺走。唯一的“解决方案”是直接在IIS服务器上运行网站代码/页面,这将完全绕过防火墙。这充其量只是一个创可贴......因为它对于有权直接在服务器上运行站点的管理员(如我)来说是一个可用的解决方案。如果在任何时候,客户端需要此功能才能使用,则没有解决方法。

asp.net IIS 注入 防火墙 SQL 脚本

评论

0赞 JuanR 12/12/2022
请发布将文本保存到数据库中的代码。如果不知道您到底在做什么,我们就不可能帮助您找到不同的方法。您遇到的很可能是防病毒/防火墙的软件/固件更新。他们的检测方法一直在发展,你显然在代码中做了一些他们认为危险的事情。
0赞 TekkGuy 12/13/2022
我正在使用第三方 RAD 开发工具,但用于“保存”数据的代码不是问题,因为服务器端代码永远没有机会运行。它是表单本身的回发,被声称“SQL 注入”的防火墙阻止。通常,我一直认为SQL注入应该在服务器级别而不是防火墙级别进行处理,因为防火墙无法(根据我的理解)区分要执行的代码和要存储的代码。我错了吗?
0赞 JuanR 12/13/2022
我们正在到达某个地方。你在表格中使用什么?是WebForms吗?MVC的?请发布创建表单字段的代码以及处理回发的代码。
0赞 JuanR 12/13/2022
另外,请不要添加评论作为答案。您可以在此处编辑您的问题或发表其他评论。我使用您发布的答案中的信息编辑了您的问题。请删除您的答案。
1赞 JuanR 12/13/2022
明白了。这听起来绝对像是防火墙规则。我假设您确定源是服务器网络的防火墙,对吗?在这种情况下,您唯一的办法是让网络管理员修改规则或为您的表单添加例外。不过,一般来说,实施这些检查是有原因的。这是个坏主意,哈哈。如果这些表格没有得到妥善保护,它们可能是一场噩梦,所以他们不太可能同意这一点。您最终可能不得不以更安全的方式重新制作表单,以使其通过防火墙。

答:

0赞 Egret 12/14/2022 #1

SQL 注入的防火墙规则会阻止“看起来像”SQL 注入的参数,这可能会导致未执行的代码出现误报。

解决此问题的正确方法是修改防火墙规则。有关在 ModSecurity 中实现此方法的方法,请参阅此答案

由于这似乎不适合您,因此您可以考虑通过混淆来绕过该规则。例如,在将它放入数据库之前使用简单的固定密钥进行加密(并在显示时解密)将对防火墙隐藏此代码。并提供一些护栏,防止将来执行它。

绕过安全检查,您承担着巨大的责任。您应该非常小心地确保(并在注释中警告)此代码永远不会被执行。这包括执行它以检查它是否是正确的 SQL - 它也可能被滥用于 SQL 注入。

评论

0赞 TekkGuy 12/14/2022
感谢您的补充评论。正如你重申的那样......我们在这里的网络小组声称“没有例外”......因此,这些误报实际上是关闭了网站功能的部分。我想到了混淆/加密......在回发之前在客户端的浏览器上执行该操作,然后必须在服务器端解密,这很痛苦。目前,我目前唯一的解决方案是直接在 Web 服务器本身上工作,完全绕过防火墙。