如何在.htaccess中禁用mod_security和mod_security2

时间:2013-09-30 11:52:39

标签: php ajax apache .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

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

<IfModule mod_security.c>
  SecRuleRemoveById 300015
  ...
  SecRuleRemoveById phpids-61
</IfModule>

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

显示告知联系服务器管理员的消息将是最后一件事。首先,我将尝试使用此解决方案之一进行自动配置创建:

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

  1. 在插件激活测试期间,逐个配置模拟远程AJAX测试
  2. 从最佳常规设置配置子文件夹
  3. 开始
  4. 检查此文件夹中的AJAX代理脚本调用以及图像,样式等文件访问权限
  5. 找到成功(解除阻止且未崩溃)配置后,将选定的.htaccess文件保存到包含AJAX代理PHP文件的文件夹
  6. 如果没有任何配置(或内置wordpress AJAX脚本 - 不太可靠)功能显示错误告诉联系服务器管理员允许htaccess给定文件夹
  7. OR

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