dan*_*gel 3 regex apache wordpress mod-security
我在运行WordPress网站的Ubuntu 14.04 Apache 2.4.7上安装了mod_security。我有一些需要忽略的规则,但是我在实现一些通配符规则时遇到了麻烦,因此不必指定每个页面。
我所拥有的(在我的site.conf文件中)是...
<LocationMatch "/wp-admin/post.php">
SecRuleRemoveById 300016
</LocationMatch>
<LocationMatch "/wp-admin/nav-menus.php">
SecRuleRemoveById 300016
</LocationMatch>
<LocationMatch "(/wp-admin/|/wp-login.php)">
SecRuleRemoveById 950117
SecRuleRemoveById 950005
SecRuleRemovebyID 981173
SecRuleRemovebyId 960024
</LocationMatch>
<LocationMatch "/wp-admin/load-scripts.php">
SecRuleRemoveById 981173
</LocationMatch>
<LocationMatch "/wp-admin/plugins.php">
SecRuleRemoveById 981173
</LocationMatch>
<LocationMatch "/wp-admin/customize.php">
SecRuleRemoveById 981173
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
我想要的是将所有内容合并为在wp-admin和上使用通配符的单个规则wp-login。
我已经尝试了以下方法,但由于mod_security引发了拒绝,因此它似乎被忽略了。
<LocationMatch "(/wp-admin/*|/wp-login/*)">
....
Run Code Online (Sandbox Code Playgroud)
并且
<LocationMatch "(/wp-admin/*)">
....
Run Code Online (Sandbox Code Playgroud)
并且
<Location "/wp-admin/*">
....
Run Code Online (Sandbox Code Playgroud)
我已经对LocationMatch和regex进行了一些研究,但这里没有得到任何东西。我想要做什么?
编辑:modsec_audit.log中的引荐来源网址为 http://www.<site>.com/wp-admin/customize.php?theme=modality
尽管Carsten的答案是正确的,但应注意,Location和Location指令在第1阶段ModSecurity规则。但是,您的规则似乎都处于第2阶段,因此,在这种情况下,这并不是特别重要-尽管我没有访问规则300016的权限,所以不能100%地确定这一点。
无论如何,出于这个原因,我不喜欢使用Location和LocationMatch,个人更喜欢使用新的规则在ModSecurity中进行位置过滤,例如:
SecRule REQUEST_URI "@beginsWith /wp-(admin|login)/" \
"phase:2,id:1000,nolog,pass,ctl:ruleRemoveById=300016,\
ctl:ruleRemoveById=950117,\
ctl:ruleRemoveById=950005
...etc.
Run Code Online (Sandbox Code Playgroud)
这样,我可以在规则过滤中保持一致(而不是使用上述规则过滤第1阶段规则,而通过位置匹配过滤其他规则)。但是,每个阶段都需要一个规则。无论如何,正如我所说,目前所有这些都是第二阶段或以上规则并不重要。
另一个值得记住的有趣的事情是,如果您使用SecRuleRemoveById,则需要在要删除的规则之后指定它;而如果您使用ctl:ruleRemoveById,则需要在要删除的规则之前指定它。
但是,大多数Wordpress攻击都将针对这些URL。所以你想变得非常肯定,你不需要这些规则。并且通过移至此类更通用的异常,您可以将每个规则与超出其所需范围的匹配。例如,如果从您的原始设置来看,/ wp-login.php仅需要这些异常中的4个,但是您将拥有所有这些异常。
我建议您不要放松规则以匹配更多内容,而应努力保持严格的规则,而不要进行此更改。
实际上,您可以进一步加紧它们以仅匹配导致异常需要的某些参数。例如,如果仅用户名字段引起您的问题,则可以将规则收紧:
<LocationMatch "(/wp-admin/|/wp-login.php)">
SecRuleUpdateTargetById 950117 !ARGS:'username'
SecRuleUpdateTargetById 950005 !ARGS:'username'
SecRuleUpdateTargetById 981173 !ARGS:'username'
SecRuleUpdateTargetById 960024 !ARGS:'username'
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
或其他格式:
SecRule REQUEST_URI "@beginsWith /wp-(admin|login)/" \
"phase:2,id:1000,nolog,pass,\
ctl:ruleRemoveTargetById=950117;ARGS:username,\
ctl:ruleRemoveTargetById=950005;ARGS:username,\
ctl:ruleRemoveTargetById=981173;ARGS:username,\
ctl:ruleRemoveTargetById=960024;ARGS:username
Run Code Online (Sandbox Code Playgroud)
是的,这可能意味着额外的工作,我知道您来此是为了合并您的规则以简化此工作,但是如果最终禁用了许多旨在保护的规则,则运行像ModSecurity这样的WAF毫无意义与之相反,不幸的是,Wordpress成为许多坏人的积极目标,部分原因是其受欢迎程度。
因此,虽然我没有直接回答您的问题,但我希望它能对您有所帮助,并为您提供思考的机会。
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |