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

时间:2012-10-17 06:25:41

标签: php apache .htaccess

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

我在个人域名中使用WordPress并发布内容包含一些代码块的帖子,根据我的托管服务提供商说mod_security出错,我的IP因mod_security而进入防火墙

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

7 个答案:

答案 0 :(得分:42)

可以这样做,但很可能是您的主机因某种原因而实施了mod_security。确保他们批准你为自己的网站禁用它。

那说,应该这样做;

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

答案 1 :(得分:6)

某些服务器和网络主机上,可以通过.htaccess禁用ModSecurity,但仅限于完整 - 您无法禁用单个规则。

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

### 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)
<IfModule mod_security.c>
  <If "%{REQUEST_URI} =~ m#/admin/#">
    SecFilterEngine Off
    SecFilterScanPOST Off
  </If>
</IfModule>

答案 2 :(得分:4)

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

即使您使用htaccess缓解编译modsec,也可以使用较少的指令。例如,SecRuleEngine不能再在那里使用了。如果允许,这是默认情况下可在htaccess中使用的列表(请记住,主机可能会使用AllowOverride进一步限制此列表):

    - SecAction
    - SecRule

    - SecRuleRemoveByMsg
    - SecRuleRemoveByTag
    - SecRuleRemoveById

    - SecRuleUpdateActionById
    - SecRuleUpdateTargetById
    - SecRuleUpdateTargetByTag
    - SecRuleUpdateTargetByMsg

More info on the official modsec wiki

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

答案 3 :(得分:2)

如果上述解决方案不起作用,请尝试:

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

答案 4 :(得分:1)

对于某些网络主机,包括 NameCheap ,无法使用.htaccess禁用ModSecurity。唯一的选择是联系技术支持并要求他们为您更改配置。

答案 5 :(得分:1)

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

&#13;
&#13;
<ifmodule mod_security.c>

SecFilterEngine Off
SecFilterScanPOST Off

</ifmodule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
&#13;
&#13;
&#13;

保持mod_security规则,如SecFilterEngine和彼此分开的部分。它适用于apache服务器

答案 6 :(得分:0)

对于只希望绕过ERROR页面以在共享主机上显示内容的任何人。您可能想尝试在.htaccess文件中使用重定向。如果说是406错误,那么在UnoEuro上,仅停用安全性似乎并不起作用。所以我改用了这个:

ErrorDocument 406 /

然后,您始终可以使用PHP更改错误状态。但是请注意,就我而言,这样做意味着我绕过WAF时为SQL注入打开了一扇门。因此,您需要确保您有自己的安全措施或尽快重新启用安全性。