
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, allow
mit zu verwendenDetectionOnly
Laut diesem Artikel:
Beispiel:
SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
"id:3021,allow,phase:2,nolog,ctl:ruleEngine=On"