modsecurity 正規表現が単純なルールに必ずしも一致しない

modsecurity 正規表現が単純なルールに必ずしも一致しない

一致が見つかったときにルールの処理を停止し、POST 要求でステータス 200 を返すだけの単純な modsecurity 正規表現ルールを作成しようとしています。これにより、ルールが続行されず、チェーン内の後の別の CRS ルールによってブロックされることがなくなります。

これが私のルールです:

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

何が起こるかというと、ルールが実行されて許可されることもありますが、他の場合には modsecurity が続行され、このルールの後に modsecurity の組み込み CRS ルールによって捕捉されます。その理由がわかりません。私は modsecurity を初めて使用し、オンライン ドキュメントをすべて読んでいますが、まだ答えは見つかっていません。また、regex ルール (regex を使用した他の場所) も試しましたが、少し異なる方法で使用され、結果は同じでした。機能する場合もあれば、機能しない場合もあります。

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

他にも許可したい複雑な正規表現スクリプトがあるため、この特定の状況の何が問題なのかを理解したいので、この問題を理解することは他のスクリプトにも当てはまるはずです。

よろしくお願いします。

[編集]

次の場合に表示されます:

SecRuleEngine DetectionOnly

設定する必要があるもの:

ctl:ruleEngine=Off

または

ctl:ruleEngine=On

使用しようallowとするとDetectionOnly

この記事によると:

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

例:

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

関連情報