我正在尝试评估和阻止某些URI没有给定ARG的GET / POST请求。
以下规则不验证“!@ eq 1”行
(REQUEST_URI和REQUEST_HEADERS在单独测试时按预期工作)
SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:1,id:999955,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
SecRule &ARGS:cualquiera "!@eq 1" "chain"
SecRule &REQUEST_HEADERS:Referer "@eq 0"
我可以验证“@ eq1”和“!@ eq1”,如果我写一个类似下面的SecRule:
SecRule &ARGS:cualquiera "@eq 1" "id:999957,phase:2,pass,log,capture,msg:'param cualquiera found: %{MATCHED_VAR}'"
规则ID 999955如何实现这一目标?
实施例
SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:2,id:999955,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
SecRule &ARGS:cualquiera "@eq 1" "chain"
SecRule &REQUEST_HEADERS:Referer "@eq 0"
卷曲 - 形成cualquiera = ANY http://foo.bar/jwtpoc.showcaller [确定]
[22/Mar/2017:17:23:50 --0400] [foo.bar/sid#1ab39b8][rid#7f518c014e60][/jwtpoc.showcaller][1] Access denied with code 508 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/moduleconf/myrules/test/cp_rules.conf"] [line "2"] [id "999955"] [msg "IP: 10.10.10.145 GET/POST test URI"]
但对于这个:
curl --referer myReferer http://beta.reservhotel.com/win/owa/jwtpoc.showcaller [ NOTOK ]
规则 SecRule& ARGS:cualquiera“@eq 1”“chain”未被考虑且此操作未被阻止
谢谢!
答案 0 :(得分:0)
第1阶段不提供POST参数。因此,将链式规则999955更改为第2阶段规则,它应该可以正常工作。
您也误解了链式规则的工作原理。它们作为AND参数起作用。所以所有规则都必须符合工作要求。这是你问题中的第一条规则,即块jwtpoc请求,它也没有cualquiera参数,也没有引用者。
您第二次尝试然后移除cualquiera参数测试的不是部分。所以它查找具有cualquiera参数的jwtpoc请求,并且也没有引用者。您的第一个示例与所有三个规则匹配,但您的第二个示例不匹配(因为中间规则不匹配)。
如果您想在没有cualquiera参数或引用者的情况下使所有jwtpoc请求失败,那么您需要为此OR语句编写两个规则。像这样:
#Rule 9999550 to block jwtpoc requests with a cualquiera argument
SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:2,id:9999550,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
SecRule &ARGS:cualquiera "!@eq 1"
#Rule 9999551 to block jwtpoc requests with no referrer
SecRule REQUEST_URI "(?i:(jwtpoc))" "phase:2,id:9999551,block,log,deny,status:508,msg:'IP: %{REMOTE_ADDR} GET/POST test URI',chain"
SecRule &REQUEST_HEADERS:Referer "@eq 0"