我们如何通过在 Apache 服务器上mod_security
使用文件来禁用?.htaccess
我在我的个人域上使用 WordPress 并发布了一个内容有一些代码块的帖子,并且根据我的托管服务提供商所说mod_security
的给出了一个错误,并且我的 IP 已进入防火墙,因为mod_security
.
所以我想mod_security
通过使用.htaccess
文件来禁用。
可以这样做,但很可能您的主机实施mod_security
是有原因的。确保他们同意您为自己的网站禁用它。
也就是说,应该这样做;
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
在某些服务器和 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>
只是为了更新 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
作为 2.x 用户的附加说明:IfModule
现在应该寻找mod_security2.c
而不是旧的mod_security.c
对于包括NameCheap在内的一些网络主机,无法使用.htaccess
. 唯一的选择是联系技术支持并要求他们为您更改配置。
当上述解决方案不起作用时,请尝试以下操作:
<IfModule mod_security.c>
SecRuleEngine Off
SecFilterInheritance Off
SecFilterEngine Off
SecFilterScanPOST Off
SecRuleRemoveById 300015 3000016 3000017
</IfModule>
在站点根目录的 .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 服务器
对于任何只想绕过错误页面以在共享主机上显示内容的人。您可能想尝试在 .htaccess 文件中使用重定向。如果是说 406 错误,在 UnoEuro 上它似乎并不能简单地停用安全性。所以我改用这个:
ErrorDocument 406 /
然后您可以随时使用 PHP 更改错误状态。但请注意,在我的情况下,这样做意味着我在绕过 WAF 时打开了 SQL 注入的大门。因此,您需要确保您有自己的安全措施或尽快再次启用安全性。