modsecurity 正则表达式并不总是匹配简单规则

modsecurity 正则表达式并不总是匹配简单规则

我正在尝试创建一个简单的 modsecurity 正则表达式规则,该规则在找到匹配项时停止处理规则,并且仅在 POST 请求上返回状态 200,以便它不会继续并被链中后面的另一个 CRS 规则阻止。

这是我的规则:

    SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
                        "id:3021,allow,phase:2,nolog"

发生的情况是,有时规则运行并被允许,但有时 modsecurity 会继续运行,并在此规则之后被 modsecurity 内置的 CRS 规则捕获,我似乎无法弄清楚为什么?我是 modsecurity 的新手,已经阅读了所有在线文档,但尚未找到答案。我还尝试了正则表达式规则(在其他地方我使用了正则表达式),使用方式略有不同,但结果相同。有时它们有效,有时则无效。

"@rx ^/\cgi-bin\/myPHPScript\.php"
"@rx ^.*\/cgi-bin\/myPHPScript\.php.*$"

我想了解这种特殊情况出了什么问题,因为我还有其他更复杂的正则表达式脚本也想允许,所以理解这个问题应该适用于其他问题。

先感谢您。

[编辑]

似乎当:

SecRuleEngine DetectionOnly

需要设置:

ctl:ruleEngine=Off

或者

ctl:ruleEngine=On

当尝试allow使用DetectionOnly

根据这篇文章:

https://stackoverflow.com/questions/58452059/modsecurity-is-turning-off-the-rule-engine-really-necessary-when-implementing-a

例子:

SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
                        "id:3021,allow,phase:2,nolog,ctl:ruleEngine=On"

相关内容