
我正在嘗試建立一個簡單的modsecurity 正規表示式規則,該規則在找到匹配項時停止處理規則,並僅在POST 請求上返回狀態200,這樣它就不會繼續並被鏈中稍後的另一個CRS規則阻止。
這是我的規則:
SecRule REQUEST_URI "@rx ^(?i)/cgi-bin/myPHPScript.php" \
"id:3021,allow,phase:2,nolog"
發生的情況是,有時規則會運行並被允許,但有時 modsecurity 會繼續運行,並在該規則之後被 modsecurity 內建的 CRS 規則捕獲,我似乎無法弄清楚為什麼?我是 modsecurity 的新手,並且一直在閱讀所有線上文檔,但尚未找到答案。我還嘗試過正規表示式規則(在其他地方我使用過正則表達式),其使用方式略有不同,但結果相同。有時它們起作用,有時則不起作用。
"@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"