
Я пытаюсь создать простое правило регулярного выражения modsecurity, которое останавливает обработку правил при обнаружении совпадения и просто возвращает статус 200 в запросе POST, чтобы он не продолжался и не блокировался другим правилом CRS далее в цепочке.
Вот мое правило:
SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
"id:3021,allow,phase:2,nolog"
Что происходит, так это то, что иногда правило выполняется и разрешается, но иногда modsecurity продолжает работу и попадает под встроенные правила CRS modsecurity после этого правила, и я не могу понять, почему? Я новичок в modsecurity и прочитал все онлайн-документы, но пока не нашел ответа. Я также пробовал правила regex, которые (в других местах я использовал regex) использовались немного по-другому с теми же результатами. Иногда они работают, а иногда нет.
"@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"