Mod_security排除不完全工作,仍然阻止CSS和图像

我已经把我的规定放在下面的任何一个:

SecRule REQUEST_URI "@beginsWith /directory" "phase:1,id:12345,allow" SecRule REQUEST_URI "@beginsWith /directory" "phase:1,id:12345,ctl:ruleEngine=off" 

当我浏览/directory/javascript.php?sqlinjection时,将允许显示/目录中的HTML,但不显示驻留在根目录/ css /和/ images /中的CSS和图像。 看起来他们被阻止,因为在页面上有SQL注入,但没有排除这些目录。

我如何configuration它来完全closures/目录下的mod_security并显示所有图像和CSS?

在ModSecurity中,每个请求都被视为一个独立的请求,并且不知道您正在为以前的请求加载CSS和图像。

它可能知道的唯一方法就是Referer HTTP Header中的内容。 事实上,我怀疑这是什么原因导致你的问题,因为引用页面的URL包含什么看起来像一个SQL注入,所以每个资源加载,也被阻止。

所以你有很多select:

  1. 你可以为/ css和/图像编写类似的规则。 请注意,你们的两条规则都做同样的事情,两者都不是必要的 – select一个或另一个。 另外,每个规则都需要有一个独立的ID,但是在两个规则中都重复了12345。

  2. 您可以closures所有请求的ModSecurity。 这似乎给你带来了更多的问题,而且正在解决。 显然,这意味着你失去了安全保护,但是如果你只是想让几乎所有的请求都closures,那么这是一种select。

  3. 你可以写一个新的规则来绕过基于该引用者的ModSecurity:

    #Allow any requests for resources loaded by pages in /directory SecRule REQUEST_HEADERS:Referer "@beginsWith https://www.example.com/directory" "phase:1,id:12347,allow"

  4. 你可以覆盖受这个字段影响的规则(我假设规则942100是在这个例子中触发的规则):

    #Exclude Referer HTTP Header from being checked by rule id 949110 SecRuleUpdateTargetById 942100 !REQUEST_HEADERS:Referer

选项4)将是推荐的方式,所以你只是禁用这个规则,这是一个虚假的积极的,特定的领域。 请注意,多个规则可能会触发,所以您可能需要多个例外。 你在前面的问题上也说过,规则949110正在发射,但是这是最后的检查规则,所以你需要知道在此之前发射的规则,并引起949110进入行动,并按照上述过滤出来。

这也是你应该如何防止你原来的PHP脚本被阻塞,而不是全面closures整个/目录位置的ModSecurity。

说实话,这些都是你configurationModSecurity需要做的相当标准的事情,所以build议你多阅读一下。 ModSecurity手册是学习这个恕我直言的最佳方式。