$ GET / $ POST中的“ + having +”使服务器返回403 Forbidden

Dan*_*eed 4 apache http-status-code-403

我的一位客户有一个PHP脚本,该脚本一直在莫名其妙地崩溃。经过数小时的研究,我确定您是否向任何PHP脚本发送了一个变量(通过GET或POST),该变量包含“具有t”,或转义为URL“ + having + t”,则该脚本崩溃并返回“ 403”禁止的错误”。为了测试它,我制作了一个包含全部内容的示例脚本:

<?php echo "works";
Run Code Online (Sandbox Code Playgroud)

我在这里直播(临时):http : //primecarerefer.com/test/test.php

现在,如果您尝试发送一些数据,例如:http : //primecarerefer.com/test/test.php?x=+having+x

它失败。最后一个字母可以是任何字母,并且仍然会崩溃,但是更改任何其他字母会使脚本加载正常。是什么原因导致的?如何解决?如果有人想尝试不同的组合,此链接现在处于活动状态。

PS-我发现,如果我连续多次收到403错误,则服务器将阻止我15分钟。

Liz*_*rdx 5

我在运行Apache mod_security的Web服务器上遇到了此类问题,但是配置很差,实际上mod_security的默认正则表达式规则非常糟糕,使用有效的POST或GET数据很容易触发。

需要明确的是,这与PHP或HTML无关,几乎可以肯定,这与POST和GET数据通过mod_security传递有关,并且mod_security拒绝请求是因为它认为这是SQL注入尝试。

您可以根据服务器访问权限自行编辑规则,但是我不相信您可以做任何事情,如果是mod_security,我知道您无法通过PHP做任何事情来解决此问题。

/etc/httpd/conf.d/mod_security.conf(旧路径,已更改,但给出了建议)

默认规则的示例:

SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
Run Code Online (Sandbox Code Playgroud)

这些是规则的示例 https://www.howtoforge.com/apache_mod_security

他们在这里使过滤器跳闸:

http://primecarerefer.com/test/test.php?x=%20%22%20%20select%20from%22

请注意,该文章非常老,现在规则的结构实际上已经大不相同,但是不良的正则表达式仍然存在,即:select [任意数量的字符,无论距离多远或多远] from都将使其跳闸,所有匹配的sql这些宽松的规则将使其失败。

但是由于编辑这些默认文件需要访问它们,并且还假定在升级apache mod_security时它们不会在某个时候被更改,所以这不是解决我发现的问题的好方法,而是转向更好,更专业的设置,托管人,为我们解决了这些问题。但是,如果您与托管支持人员交谈以了解问题的根源,那确实有帮助。

实际上,“具有”一点都不无关紧要,它是POST / GET上运行的安全性过滤器中正则表达式规则中sql注入过滤器的一部分。当管理员编辑CMS页面时,我们总是会碰到这种情况,这总是会触发一些sql过滤器,因为任何人类单词字符串都必然会包含诸如“ select。* from”或“ insert。* into”之类的内容。

这个mod_security问题曾经使我疯狂地尝试调试为什么后端编辑表单更新会挂起,直到我最终意识到在mod_security文件本身中通用正则表达式模式做得不好。

从某种意义上讲,这不是答案,因为唯一的解决方法是进入服务器,然后编辑规则文件,这很容易,或者禁用mod_security,或者迁移到不使用那些不良通用代码的网络托管服务商默认值。

  • http://primecarerefer.com/test/test.php?x=%20%22%20select%20zowder%22是的,显然是mod_security,还有另一个。我找不到安全过滤器规则的副本,但是我认识到这一点,因为我将规则固定得不太草率。实际上,我很惊讶地看到Apache出厂默认设置如此糟糕,以至于大多数用户只是将其关闭而不是尝试对其进行修复,这违背了此目的。 (2认同)