我们如何通过在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是不可能的。 唯一的选择是联系技术支持,并要求他们改变你的配置。