Apache-2.2

不帶查詢參數的 Modsecurity 檢查 REQUEST_URI

  • May 5, 2016

目前,我正在使用 Modsecurity XSS 預防,但我很難理解如何準確地限制我在REQUEST_URI變數中檢查的內容。

我的例子:

#
# -=[ XSS Filters - Category 3 ]=-
# XSS vectors making use of Javascripts URIs, e.g., <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*:|:|[\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}"

在上面的範例中,正則表達式檢查某些標籤,如果找到,則停止請求,記錄嘗試,然後拋出 403 禁止。

沒關係,但我有一個特定的 URL,看起來像這樣:

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

在哪裡&style=使 ModSecurity 引發錯誤並停止請求。

同樣,他們有一個規則來檢查 just style=

所以我的問題是,我怎樣才能REQUEST_URI以某種方式(在 ModSecurity 規則內)進行更改,以便規則只檢查**?**(查詢字元串)之前的所有內容。

您可以使用REQUEST_FILENAME變數而不是REQUEST_URI

建議您不要直接編輯 OWASP CRS 規則本身,而是添加額外的規則來調整它們。這允許您升級 CRS 並仍然保留您的規則。在這裡,您可以在載入所有 OWASP CRS 規則文件後添加以下配置來調整此規則:

SecRuleUpdateTargetById 973338 REQUEST_FILENAME REQUEST_URI

但是,當您可能只想對這個 URL 執行此操作時,這將減少所有請求的此規則,在這種情況下,更好的方法可能是通過在載入 OWASP CRS 規則之前添加以下規則來僅針對此 URL 關閉此規則文件(注意 id 必須是唯一的,因此如果您已經有規則 1,則在此處選擇唯一的):

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"

引用自:https://serverfault.com/questions/774375