Modsecurity-Regex stimmt nicht immer mit einfacher Regel überein

Modsecurity-Regex stimmt nicht immer mit einfacher Regel überein

Ich versuche, eine einfache Modsecurity-Regex-Regel zu erstellen, die die Verarbeitung der Regeln stoppt, wenn eine Übereinstimmung gefunden wird, und bei einer POST-Anfrage einfach den Status 200 zurückgibt, damit sie nicht fortgesetzt wird und später in der Kette durch eine andere CRS-Regel blockiert wird.

Hier ist meine Regel:

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

Was passiert, ist, dass die Regel manchmal ausgeführt wird und zugelassen wird, aber manchmal wird Modsecurity fortgesetzt und von den in Modsecurity integrierten CRS-Regeln nach dieser Regel abgefangen, und ich kann nicht herausfinden, warum? Ich bin neu bei Modsecurity und habe alle Online-Dokumente gelesen, aber noch keine Antwort gefunden. Ich habe auch Regex-Regeln ausprobiert, die (an anderen Stellen, an denen ich Regex verwendet habe) leicht anders mit denselben Ergebnissen verwendet wurden. Manchmal funktionieren sie und manchmal nicht.

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

Ich möchte verstehen, was in dieser speziellen Situation falsch ist, da ich auch andere, komplexere Regex-Skripte zulassen möchte. Das Verständnis des Problems in diesem Fall sollte also auch für die anderen gelten.

Vielen Dank im Voraus.

[BEARBEITEN]

Es scheint, dass wenn:

SecRuleEngine DetectionOnly

man muss einstellen:

ctl:ruleEngine=Off

oder

ctl:ruleEngine=On

beim Versuch, allowmit zu verwendenDetectionOnly

Laut diesem Artikel:

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

Beispiel:

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

verwandte Informationen