Modsecurity检查不带查询参数的REQUEST_URI

目前,我正在使用Modsecurity XSS预防,但是我很难理解我可以如何限制在REQUEST_URIvariables中检查的内容。

我的例子:

 # # -=[ XSS Filters - Category 3 ]=- # XSS vectors making use of Javascripts URIs, eg, <p style="background:url(javascript:alert(1))"> # SecRule REQUEST_URI|ARGS "(?i)((?:=|U\s*R\s*L\s*\()\s*[^>]*\s*S\s*C\s*R\s*I\s*P\s*T\s*:|&colon;|[\s\S]allowscriptaccess[\s\S]|[\s\S]src[\s\S]|[\s\S]data:text\/html[\s\S]|[\s\S]xlink:href[\s\S]|[\s\S]base64[\s\S]|[\s\S]xmlns[\s\S]|[\s\S]xhtml[\s\S]|[\s\S]style[\s\S]|<style[^>]*>[\s\S]*?|[\s\S]@import[\s\S]|<applet[^>]*>[\s\S]*?|<meta[^>]*>[\s\S]*?|<object[^>]*>[\s\S]*?)" "id:'973338',phase:2,t:none,rev:'1',ver:'OWASP_CRS/2.2.9',maturity:'1',accuracy:'8',t:urlDecodeUni,t:htmlEntityDecode,t:jsDecode,t:cssDecode,log,capture,tag:'OWASP_CRS/WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',msg:'XSS Filter - Category 3: Javascript URI Vector',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}" 

在上面的例子中,正则expression式检查某些标签,如果find,停止请求,logging尝试,然后抛出一个403禁止。

这很好,但我有一个特定的URL,看起来像这样:

/chart.php?this=haha&style=testStyle

Where &style=使ModSecurity引发错误并停止请求。

同样,他们有一个规则,只是检查style=

所以我的问题是,我怎么能改变REQUEST_URI的方式(在ModSecurity规则内),以便规则只检查之前的一切? (请求参数)。

您可以使用REQUEST_FILENAMEvariables而不是REQUEST_URI 。

build议您不要直接编辑OWASP CRS规则,而是增加额外的规则来调整它们。 这使您可以升级CRS并保持您的规则。 在加载所有OWASP CRS规则文件以调整此规则后,可以通过添加以下configuration来执行此操作:

 SecRuleUpdateTargetById 973338 REQUEST_FILENAME REQUEST_URI 

然而,这将减less所有请求的这个规则,当你只想为这个URL做这个时,在这种情况下,更好的方法可能是通过在加载OWASP CRS规则之前添加下面的规则来closures这个规则文件(注意id必须是唯一的,所以如果你已经有一个规则1,然后select一个独特的如果这里):

 SecRule REQUEST_FILENAME chart.php "phase:2,nolog,id:1,ctl:ruleRemoveById=973338,pass" 

是的,在你问之前,在规则和其他规则之后指定了一些覆盖,使用ctl,需要在之前指定。

如果你有多个禁用规则,你可以使用这样的语法:

 SecRule REQUEST_FILENAME chart.php "phase:2,nolog,id:1,ctl:ruleRemoveById=973338,ctl:ruleRemoveById=973306,pass"