如何禁用.htaccess文件中的mod_security?

我们如何通过在Apache服务器上使用.htaccess文件来禁用mod_security

我在我的个人域名上使用WordPress,并发布内容有一些代码块的post,并根据我的托pipe服务提供商说, mod_security提供了一个错误,我的IP由于mod_security进入防火墙。

所以我想通过使用.htaccess文件禁用mod_security

这是可能的,但很可能你的主机实现了mod_security的原因。 确保他们批准你为自己的网站禁用它。

这就是说,这应该做到这一点;

 <Ifmodulee mod_security.c> SecFilterEngine Off SecFilterScanPOST Off </Ifmodulee> 

当上述解决方案不起作用时,请尝试以下操作

 <Ifmodulee mod_security.c> SecRuleEngine Off SecFilterInheritance Off SecFilterEngine Off SecFilterScanPOST Off SecRuleRemoveById 300015 3000016 3000017 </Ifmodulee> 

只是为了更新这个问题的mod_security 2.7.0以上 – 他们关闭了通过htaccess缓解modsec的能力,除非你使用--enable-htaccess-config标志进行编译。 大多数主机不使用这个编译器选项,因为它允许太宽松的安全性。 相反,httpd.conf中的虚拟主机是控制modsec的前往选项。

即使你使用htaccess缓解来编译modsec,也可以使用更少的指令。 SecRuleEngine不能再被使用。 如果允许的话,这里是一个可以在htaccess中默认使用的列表(记住主机可以用AllowOverride进一步限制这个列表):

  - SecAction - SecRule - SecRuleRemoveByMsg - SecRuleRemoveByTag - SecRuleRemoveById - SecRuleUpdateActionById - SecRuleUpdateTargetById - SecRuleUpdateTargetByTag - SecRuleUpdateTargetByMsg 

有关官方modsec wiki的更多信息

作为2.x用户的附加说明: Ifmodulee现在应该查找mod_security2.c而不是旧的mod_security.c

某些服务器和Web主机上,可以通过.htaccess禁用ModSecurity,但只能完全禁用 – 不能禁用单个规则。

而不是为整个网站禁用它,最好是限制这个特定的网址。 您可以通过下面的<If>语句中的正则表达式指定要匹配的URL …

 ### DISABLE mod_security firewall ### Some rules are currently too strict and are blocking legitimate users ### We only disable it for URLs that contain the regex below ### The regex below should be placed between "m#" and "#" ### (this syntax is required when the string contains forward slashes) <Ifmodulee mod_security.c> <If "%{REQUEST_URI} =~ m#/admin/#"> SecFilterEngine Off SecFilterScanPOST Off </If> </Ifmodulee> 

在站点根目录的.htaccess文件中编辑以下行:

 <ifmodule mod_security.c> SecFilterEngine Off SecFilterScanPOST Off </ifmodule> <Ifmodulee mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </Ifmodulee> 

对于包括NameCheap的一些网络主机,使用.htaccess禁用ModSecurity是不可能的。 唯一的选择是联系技术支持,并要求他们改变你的配置。