Owasp Mod security白名单,多个条件

Owasp Mod security白名单,多个条件,owasp,mod-security,Owasp,Mod Security,我已经使用Owasp预定义的modsec规则在服务器上设置了mod_安全性 然而,我得到了很多假阳性,所以我开始建立白名单规则 我对此url有误报: http://example.com/fr/share/?u=http%3A%2F%2Fwww.example.com%2Fen%2Ffiles%2Fimgs%2F%3Fpage%3D100%2 “检测到多个URL编码”,“OWASP\U CRS/协议违反/规避” 根据规则: SecRule ARGS "\%((?!$|\W)|[0-9a-fA

我已经使用Owasp预定义的modsec规则在服务器上设置了mod_安全性

然而,我得到了很多假阳性,所以我开始建立白名单规则

我对此url有误报:

http://example.com/fr/share/?u=http%3A%2F%2Fwww.example.com%2Fen%2Ffiles%2Fimgs%2F%3Fpage%3D100%2
“检测到多个URL编码”,“OWASP\U CRS/协议违反/规避” 根据规则:

SecRule ARGS  "\%((?!$|\W)|[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})" "phase:2,rev:'2',ver:'OWASP_CRS/2.2.9',maturity:'6',accuracy:'8',t:none,block,msg:'Multiple URL Encoding Detected',id:'1',tag:'OWASP_CRS/PROTOCOL_VIOLATION/EVASION',severity:'4',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.warning_anomaly_score},setvar:tx.%{rule.id}-OWASP_CRS/PROTOCOL_VIOLATION/EVASION-%{matched_var_name}=%{matched_var}"
因此,我的主要想法是创建一个规则,除了url上以/fr/share/?开头的参数“u”之外,该规则仍然进行检查

我有一些提示:

SecRule ARGS|!ARGS:u ... but how can I combine  the mention where !REQUEST_URI equal to "/fr/share?.*"

所以这里有几个选择

您可以重写规则,并使用链接来测试多个条件(注意,出于格式化原因,我已经剥离了一些规则操作):

“chain”操作意味着在采取操作之前,下一行的规则也必须通过,因此在本例中,它检查请求的URI不是以/fr/share开头的

但是,这意味着您已经拥有了此规则的副本,这使得升级到核心规则集的未来版本更加困难。最好保留原来的规则(我查过了,它实际上是规则id 950109,而不是您给出的规则id 1,所以我假设规则1是您的副本)

因此,要保留原始规则,但不让其发出错误警报,您有几个选项,详细内容如下:

您可以禁用整个规则:

SecRuleRemoveById 950109
这应该在定义规则后指定

显然,如果它只对一个特定的URL、参数组合给出一个误判,并且意味着您失去了规则对任何其他URL或参数所提供的保护,那么这就有点极端了

您可以仅为该“u”参数禁用该规则:

SecRuleUpdateTargetById 950109 !ARGS:'u'
SecRule REQUEST_URI "@beginsWith /fr/share/" \
"t:none,id:1,nolog,pass,ctl:ruleRemoveTargetById=950109;ARGS:u"
我认为这可以在规则定义之前或之后指定,但不能100%确定

但是这将禁用所有“u”参数的,并且您只想在这个特定调用中禁用它,所以稍微好一点,但仍然不是您想要的

因此,最好的方法是对与URL匹配的规则使用ctl操作来更改该参数的原始规则:

SecRuleUpdateTargetById 950109 !ARGS:'u'
SecRule REQUEST_URI "@beginsWith /fr/share/" \
"t:none,id:1,nolog,pass,ctl:ruleRemoveTargetById=950109;ARGS:u"
对于规则981260,与您要求的几乎相同的请求记录在此处:

我添加了“无日志”一词。我最后确实有一个SecRule请求URI“@beginsWith/fr/share/”t:none,nolog,id:1,ctl:ruleRemoveTargetById=950109;ARGS:u,ctl:ruleRemoveTargetById=950119;ARGS:u”同意。编辑了我的答案,还添加了通行证。