mod_security - 如何處理文字/xml request_body

mod_security - 如何處理文字/xml request_body

我正在嘗試處理 Web 請求的 REQUEST_BODY,其中包含 Content-Type: text/xml 和一些 XML。假設我有以下請求:

curl -v -d
"
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <value>
      <struct>
        <member>
          <name>SomeName</name>
          <value>SomeValue</value>
        </member>
      </struct>
    </value>
</methodResponse>
"
-H "Content-Type:text/xml" http://gryzli.info/some_url.php 

我需要的是能夠將 REQUEST_BODY 與“SomeName”或“SomeValue”作為純文字字串進行匹配。

我已經嘗試過以下操作:

1. 嘗試在第二階段進行匹配,使用以下關鍵字:

SecRule REQUEST_BODY "SomeValue" "phase:2, ....."  - No success

SecRule FULL_REQUEST "SomeValue" "phase:2, ....."  - No success

SecRule ARGS         "SomeValue" "phase:2, ....."  - No success

2.除了上面的規則之外,我嘗試以不同的組合來啟動這些規則:

SecRule REQUEST_HEADERS:Content-Type "text/xml" "phase:1,id:100000,t:lowercase,nolog,pass, ctl:requestBodyProcessor=MULTIPART"

或者

SecRule REQUEST_HEADERS:Content-Type "text/xml" "phase:1,id:100000,t:lowercase,nolog,pass, ctl:requestBodyProcessor=URLENCODED"

或者

SecRule REQUEST_HEADERS:Content-Type "text/xml" "phase:1,id:100000,t:lowercase,nolog,pass, ctl:forceRequestBodyVariable=On"

再次 -沒有成功

真正的問題:

當我的客戶端請求為 Content-Type: text/xml 時,有人知道如何匹配 REQUEST_BODY 中的簡單純文字字串嗎?

另外,我更喜歡不使用可以解析 XML 的 XML 引擎,因為我預計這樣做會帶來很大的效能損失。

答案1

最後,我找到了符合 XML 內容類型中的純文字值的答案,範例如下:

SecRequestBodyAccess On

SecRule         REQUEST_HEADERS:Content-Type    "text/xml"              "phase:1, nolog,pass,ctl:requestBodyProcessor=URLENCODED, id:2222"

SecRule         REQUEST_BODY                    "some_bad_string"          "phase:2, t:none, deny,msg:'Matched some_bad_string', status:500,auditlog, id:3333"

它的作用如下:

  1. 在「phase:1」(REQUEST_HEADERS 階段)中,如果 Content-Type 為「text/xml:」則符合。如果是,則將主體處理引擎變更為“URL編碼

  2. 在“phase:2”(REQUEST_BODY階段)中,符合明文字串“一些壞字串」並阻止請求,狀態碼為:500。

相關內容