
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 allow
comDetectionOnly
De acordo com este artigo:
Exemplo:
SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
"id:3021,allow,phase:2,nolog,ctl:ruleEngine=On"