mod_security - Como processar text / xml request_body

2

Estou tentando processar REQUEST_BODY de solicitação da web, que tem Content-Type: text / xml e algum XML dentro dela. Digamos que eu tenha o seguinte pedido:

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 

O que eu preciso é poder combinar o REQUEST_BODY com "SomeName" ou "SomeValue" como uma string de texto simples.

Já tentei as seguintes coisas:

1. Tentando combinar na fase 2, com as seguintes palavras-chave:

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

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

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

2. Além das regras acima, tentei ativar essas regras em diferentes combinações:

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

OR

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

OR

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

Novamente - sem sucesso .

A verdadeira questão:

Alguém sabe como corresponder uma string de texto simples dentro de REQUEST_BODY quando a solicitação do meu cliente é de Content-Type: text / xml?

Também prefiro NÃO usar o mecanismo XML, que pode analisar meu XML, porque espero uma grande penalidade de desempenho ao fazer isso.

    
por gryzli 08.10.2015 / 14:40

1 resposta

2

Finalmente, encontrei a resposta para corresponder um valor de texto simples no tipo de conteúdo XML, aqui está o exemplo:

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"

Aqui está o que faz:

  1. Em "phase: 1" (fase REQUEST_HEADERS), combine se o Content-Type for "text / xml:". Se sim, altere o mecanismo de processamento do corpo para " URLENCODED "

  2. Em "phase: 2" (fase REQUEST_BODY), combine com a string de texto simples " some_bad_string " e bloqueie a solicitação com o código de status: 500.

por 13.10.2015 / 13:31