ModSecurity:破坏性行为只能由链启动规则指定

ModSecurity: Disruptive actions can only be specified by chain starter rules

我只想在文件位于特定目录时使用 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。我也尝试过以其他方式编写规则,但没有帮助。

知道为什么会这样吗?

你的规则没有意义。

如果它在管理区域拒绝它并查看下一条规则(链),您允许它通过的地方!是哪个?阻止还是通过?

此外,您不能将来自两个不同阶段的规则链接起来(第 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'"