40

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

我在我的个人域上使用 WordPress 并发布了一个内容有一些代码块的帖子,并且根据我的托管服务提供商所说mod_security的给出了一个错误,并且我的 IP 已进入防火墙,因为mod_security.

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

4

7 回答 7

57

可以这样做,但很可能您的主机实施mod_security是有原因的。确保他们同意您为自己的网站禁用它。

也就是说,应该这样做;

<IfModule mod_security.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>
于 2012-10-17T06:29:40.023 回答
12

某些服务器和 Web 主机上,可以通过 禁用 ModSecurity .htaccess,但请注意,您只能打开或关闭它,不能禁用个别规则。

但是,仍然可以确保您的网站安全的一个好做法是仅在特定 URL 上禁用它,而不是在整个网站上禁用它。您可以通过以下语句中的正则表达式指定要匹配的 URL <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>
于 2016-09-01T02:30:08.200 回答
5

只是为了更新 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 用户的附加说明:IfModule现在应该寻找mod_security2.c而不是旧的mod_security.c

于 2014-12-03T19:18:17.700 回答
5

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

于 2015-03-11T17:21:08.830 回答
4

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

<IfModule mod_security.c>
  SecRuleEngine Off
  SecFilterInheritance Off
  SecFilterEngine Off
  SecFilterScanPOST Off
  SecRuleRemoveById 300015 3000016 3000017
</IfModule>
于 2013-08-09T16:43:23.503 回答
4

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

<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>

只需将 SecFilterEngine 之类的 mod_security 规则和部件彼此分开即可。它适用于 apache 服务器

于 2015-04-30T06:40:59.357 回答
0

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

ErrorDocument 406 /

然后您可以随时使用 PHP 更改错误状态。但请注意,在我的情况下,这样做意味着我在绕过 WAF 时打开了 SQL 注入的大门。因此,您需要确保您有自己的安全措施或尽快再次启用安全性。

于 2019-07-30T15:12:17.487 回答