mod_security - 如何处理 text/xml request_body

mod_security - 如何处理 text/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:”,则进行匹配。如果是,则将正文处理引擎更改为“网址编码

  2. 在“phase:2”(REQUEST_BODY阶段)中,匹配明文字符串“一些坏字符串“并阻止状态代码为:500 的请求。

相关内容