2016-08-02 72 views
0

我只想在文件驻留在特定目录时使用ModSecurity修改响应内容。我实现了这样的规则:ModSecurity:只能通过链起动器规则指定中断操作

SecRule REQUEST_URI "@contains /admin/" "phase:2,chain,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,log" 

SecRule STREAM_OUTPUT_BODY "@rsub s/test/replaced_string/" "phase:4,t:none,log,pass,msg:'String replaced'" 

可是我在写这条规则后,当我重新启动的Apache2,ModSecurity的给我一个错误:ModSecurity: Disruptive actions can only be specified by chain starter rules。我试图以其他方式编写规则,但没有帮助。

任何想法为什么会发生?

回答

1

你的规则没有道理。

如果它在管理员区域中否认它并查看下一个规则(链),您允许它通过!这是什么?阻止或通过?

此外,您不能链接来自两个不同阶段的规则(链中的第一个规则中的第2个阶段和第二个规则中的第4个阶段)。

我建议你可能想是这样的:

SecRule REQUEST_URI "@contains /admin/" "phase:4,chain,t:none,t:urlDecode,t:lowercase,t:normalizePath,pass,log" 
    SecRule STREAM_OUTPUT_BODY "@rsub s/test/replaced_string/" "t:none,log,msg:'String replaced'" 
+0

我用你上面说的方式,但这个时候我收到以下错误尝试:只能在指定的执行阶段: '的ModSecurity通过链起动器规则。“ – user3678812

+0

更正为从第二个规则中删除冗余阶段:4。也不确定你可以具体的日志或不符合第二条规则的消息,所以你可能不得不删除这些。 –