如何在.htaccess中禁用mod_security和mod_security2

Paw*_*wel 5 php apache ajax .htaccess mod-security

我已经创建了一个Wordpress插件,它变得很受欢迎,但是我收到很多抱怨它没有用.在登录到许多用户的WP网站之后(在询问管理员密码之后),我注意到我无法轻易解决的最后一个问题是mod_security和mod_security2阻止了一些AJAX请求或.htaccess导致某些配置出现500错误.

首先,为什么这段代码会导致某些服务器返回500错误

<IfModule mod_security2.c>
  SecRuleRemoveById 300015
  SecRuleRemoveById 300016
  SecRuleRemoveById 300017
  SecRuleRemoveById 950907
  SecRuleRemoveById 950005
  SecRuleRemoveById 950006
  SecRuleRemoveById 960008
  SecRuleRemoveById 960011
  SecRuleRemoveById 960904
  SecRuleRemoveById phpids-17
  SecRuleRemoveById phpids-20
  SecRuleRemoveById phpids-21
  SecRuleRemoveById phpids-30
  SecRuleRemoveById phpids-61
Run Code Online (Sandbox Code Playgroud)

在其他服务器上通过id删除规则这种方式导致500错误:

<IfModule mod_security.c>
  SecRuleRemoveById 300015
  ...
  SecRuleRemoveById phpids-61
</IfModule>
Run Code Online (Sandbox Code Playgroud)

所以现在唯一不会导致任何服务器崩溃的工作是

<IfModule mod_security.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>
Run Code Online (Sandbox Code Playgroud)

但对于mod_security2的服务器来说还不够!

如何编写跨服务器.htaccess文件,以及我应该添加哪些IF条件以禁用mod_security和mod_security2在任何适用的位置,并且不会在其他配置上导致500错误?

编辑:不仅在Apache中.使用.htaccess的地方.

Kak*_*ait 5

ModSecurity社区经理Ryan C. Barnett声称:

.htaccess文件的支持在2.x中停止,因为它引发了太多的安全问题.

来源:http://article.gmane.org/gmane.comp.apache.mod-security.user/3065

在htaccess上启用的唯一可能配置如下(自2.7.3起),但您需要./configure --enable-htaccess-config:

  • SecAction
  • SecRule

  • SecRuleRemoveByMsg

  • SecRuleRemoveByTag
  • SecRuleRemoveById

  • SecRuleUpdateActionById

  • SecRuleUpdateTargetById
  • SecRuleUpdateTargetByTag
  • SecRuleUpdateTargetByMsg

https://github.com/SpiderLabs/ModSecurity/blob/876d4f5f9558595c00f40af25ea6216386f15cd7/CHANGES#L69


Paw*_*wel 0

显示一条消息告诉联系服务器管理员将是最后要做的事情。首先,我将尝试以下解决方案之一来自动创建配置:

在子文件夹中创建 2-3 个沙盒 .htaccess 配置

  1. 在插件激活测试过程中,通过模拟远程 AJAX 测试一一配置
  2. 从最佳常规设置 config 子文件夹开始
  3. 检查此文件夹中的 AJAX 代理脚本调用和图像、样式等文件访问
  4. 找到成功(解锁且不崩溃)的配置后,将选定的 .htaccess 文件保存到包含 AJAX 代理 PHP 文件的文件夹中
  5. 如果所有配置(或内置 WordPress AJAX 脚本 - 不太可靠)均不起作用,则会显示错误,告知联系服务器管理员以允许给定文件夹的 htaccess

或者

  1. 使用 PHP 检查加载的模块
  2. 仅当 mod_security2 存在时添加 SecRuleRemoveById id 以防止基本 mod_security 崩溃