提问人:TekkGuy 提问时间:12/12/2022 最后编辑:TekkGuy 更新时间:4/17/2023 访问量:199
防火墙检测到 SQL 注入,用于作为文本提交以供存储的 SQL 代码
SQL Injection Detected By Firewall For SQL Code Submitted As Text For Storage
问:
我这里有一个挠头的问题。一年多前,我写了一个网站功能/表单,我可以在其中提交未执行但存储在表中的 SQL 代码。这个功能在我创建它时就起作用了,因为我能够将几个脚本上传到数据库中。我已经几个月不需要使用此功能了,最近对我的网站的升级让我重新检查了功能。该功能停止工作...经过一番研究,确定我们公司的防火墙现在由于检测到“SQL注入”而阻止了表单的提交。
他们发誓没有对防火墙进行任何更改,但是,这似乎不太可能,因为此功能以前运行过。无论。。。我的困惑是,我知道许多网站,比如这个网站,允许人们使用 Web 表单界面发布“代码”,而不会被标记为 SQL 注入。我敢肯定网站(像这个网站)也有防火墙保护它们。
在页面提交/回发上传输代码以清除防火墙的 SQL 注入检查时,是否需要执行某些操作?
澄清一下......
有一个带有 LargeTextArea 控件的窗体,其中输入了 SQL 脚本。此 SQL 代码通过回发传输到服务器,服务器端代码处理将脚本保存到表中。与我假设的这个网站(StackOverflow)非常相似。我们可以在这里发布代码,而不会被防火墙拦截和阻止。我们在消息中发布的代码最终存储在服务器上的数据库中。这与我正在执行的行为相同。
由于防火墙在客户端浏览器和 Web 服务器之间进行干预,因此回发永远不会完成。因此,服务器从不接收回发数据来执行任何处理。客户端浏览器仅收到“连接重置”错误。
我一直认为SQL注入应该由服务器端处理......程序员有责任确保它不被滥用。在到达服务器之前让防火墙进行干扰,并执行代码以检查SQL注入...我觉得不对劲。即使您有阻止 SQL 注入的代码,防火墙是否在任何服务器端逻辑之前拦截和干预也无关紧要。我错了吗?
更新(2023 年 4 月 17 日): 任何阅读本文的人的最终解决方案......是没有解决办法。当出现控制防火墙的另一个部门制定阻止通信的“规则”的情况时,老实说,没有什么可以做的。防火墙干扰了整个过程,并将决策权从程序员手中夺走。唯一的“解决方案”是直接在IIS服务器上运行网站代码/页面,这将完全绕过防火墙。这充其量只是一个创可贴......因为它对于有权直接在服务器上运行站点的管理员(如我)来说是一个可用的解决方案。如果在任何时候,客户端需要此功能才能使用,则没有解决方法。
答:
SQL 注入的防火墙规则会阻止“看起来像”SQL 注入的参数,这可能会导致未执行的代码出现误报。
解决此问题的正确方法是修改防火墙规则。有关在 ModSecurity 中实现此方法的方法,请参阅此答案。
由于这似乎不适合您,因此您可以考虑通过混淆来绕过该规则。例如,在将它放入数据库之前使用简单的固定密钥进行加密(并在显示时解密)将对防火墙隐藏此代码。并提供一些护栏,防止将来执行它。
绕过安全检查,您承担着巨大的责任。您应该非常小心地确保(并在注释中警告)此代码永远不会被执行。这包括执行它以检查它是否是正确的 SQL - 它也可能被滥用于 SQL 注入。
评论
下一个:SQL注入中的密码不正确
评论