mod_security - Как обрабатывать текст/xml request_body

mod_security - Как обрабатывать текст/xml request_body

Я пытаюсь обработать 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. Попытка сопоставления на этапе 2 со следующими ключевыми словами:

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"

Снова -безуспешно.

Настоящий вопрос:

Кто-нибудь знает, как сопоставить простую текстовую строку внутри REQUEST_BODY, когда мой клиентский запрос имеет Content-Type: text/xml?

Кроме того, я предпочитаю НЕ использовать XML-движок, который может анализировать мой XML, поскольку ожидаю значительного снижения производительности при этом.

решение1

Наконец, я нашел ответ для сопоставления значения открытого текста в XML content-type, вот пример:

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.

Связанный контент