regex modsecurity nem sempre corresponde à regra simples

regex modsecurity nem sempre corresponde à regra simples

Estou tentando criar uma regra regex modsecurity simples que pare de processar as regras quando uma correspondência for encontrada e apenas retorne o status 200 em uma solicitação POST para que ela não continue e seja bloqueada por outra regra CRS posteriormente na cadeia.

Aqui está minha regra:

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

O que acontece é que às vezes a regra é executada e permitida, mas outras vezes o modsecurity continua e é pego pelas regras CRS integradas do modsecurity após essa regra e não consigo entender por quê? Sou novo no modsecurity e li todos os documentos on-line, mas ainda não encontrei a resposta. Também tentei regras de regex que (em outros lugares usei regex) foram usadas de maneira um pouco diferente com os mesmos resultados. Às vezes eles funcionam e outras vezes não.

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

Quero entender o que há de errado com esta situação específica porque tenho outros scripts regex mais complexos que também quero permitir, portanto, a compreensão do problema com este deve se aplicar aos outros.

Agradeço antecipadamente.

[EDITAR]

Parece que quando:

SecRuleEngine DetectionOnly

é preciso definir:

ctl:ruleEngine=Off

ou

ctl:ruleEngine=On

ao tentar usar allowcomDetectionOnly

De acordo com este artigo:

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

Exemplo:

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

informação relacionada