![modsecurity 正则表达式并不总是匹配简单规则](https://linux22.com/image/785403/modsecurity%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%B9%B6%E4%B8%8D%E6%80%BB%E6%98%AF%E5%8C%B9%E9%85%8D%E7%AE%80%E5%8D%95%E8%A7%84%E5%88%99.png)
我正在尝试创建一个简单的 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
根据这篇文章:
例子:
SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
"id:3021,allow,phase:2,nolog,ctl:ruleEngine=On"