modsecurity:在实施白名单规则时是否真的需要关闭规则引擎?

modsecurity: Is turning off the rule engine really necessary when implementing a whitelisting rule?

我在网上找到的几乎所有用于 modsecurity 白名单的 SecRule 示例都包括关闭规则引擎,示例:

phase:1,nolog,allow,ctl:ruleEngine=Off,id:23023

然而,就我从文档中得到的信息而言,"nolog" 与 "allow" 相结合应该已经具有完全相同的效果 - 即中断规则处理并阻止任何日志条目。因此,下面的配置不是绝对等价的吗?

phase:1,nolog,allow,id:23023

如果我说错了,两者有什么区别?

我正在使用 modsecurity 2.9.3。

我以前没见过,但我可以猜猜它为什么在那里。

allow 操作是破坏性操作。当 ModSecurity 在 DetectionOnly 模式下工作时,破坏性操作(包括 allow)实际上不会被执行。这意味着任何后续规则仍然是 运行 - 即使在正常 On 模式下 运行ning 时它们不会是 运行。这会使日志变得非常嘈杂,并且会让您认为您必须调整更多实际上不需要调整的规则。

ctl 操作不会中断,即使在 DetectionOnly 模式下也不会执行。因此,通过将 ctl:ruleEngine=Off 添加到任何 allow 规则中,您只能在仅检测模式下记录真正的错误。

其实我反其道而行之,用ctl:ruleEngine=Onallow动作即使在DetectionOnly模式下也能生效。例如,我有一个规则,靠近我所有规则的开头,查看对 index.html 页面没有参数的 GET 调用,并说它们相当安全,因此不需要 运行 其余规则.这样可以节省处理时间和错误标志。