Ich versuche, REQUEST_BODY einer Webanforderung zu verarbeiten, die den Inhaltstyp „text/xml“ und etwas XML enthält. Angenommen, ich habe die folgende Anforderung:
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
Ich muss in der Lage sein, REQUEST_BODY mit „SomeName“ oder „SomeValue“ als reine Textzeichenfolge abzugleichen.
Folgende Dinge habe ich bereits probiert:
1. Versuch einer Übereinstimmung mit Phase 2 mit folgenden Schlüsselwörtern:
SecRule REQUEST_BODY "SomeValue" "phase:2, ....." - No success
SecRule FULL_REQUEST "SomeValue" "phase:2, ....." - No success
SecRule ARGS "SomeValue" "phase:2, ....." - No success
2. Zusätzlich zu den oben genannten Regeln habe ich versucht, diese Regeln in verschiedenen Kombinationen zu aktivieren:
SecRule REQUEST_HEADERS:Content-Type "text/xml" "phase:1,id:100000,t:lowercase,nolog,pass, ctl:requestBodyProcessor=MULTIPART"
ODER
SecRule REQUEST_HEADERS:Content-Type "text/xml" "phase:1,id:100000,t:lowercase,nolog,pass, ctl:requestBodyProcessor=URLENCODED"
ODER
SecRule REQUEST_HEADERS:Content-Type "text/xml" "phase:1,id:100000,t:lowercase,nolog,pass, ctl:forceRequestBodyVariable=On"
Wieder -ohne Erfolg.
Die eigentliche Frage:
Weiß jemand, wie man eine einfache Nur-Text-Zeichenfolge in REQUEST_BODY abgleicht, wenn meine Client-Anforderung vom Inhaltstyp „text/xml“ ist?
Außerdem möchte ich die XML-Engine, die mein XML analysieren kann, NICHT verwenden, da ich davon ausgehe, dass dies zu erheblichen Leistungseinbußen führt.
Antwort1
Schließlich habe ich die Antwort zum Abgleichen eines Klartextwerts im XML-Inhaltstyp gefunden. Hier ist das Beispiel:
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"
Dies bewirkt es:
In „phase:1“ (REQUEST_HEADERS-Phase) wird abgeglichen, ob der Content-Type „text/xml:“ ist. Wenn ja, ändern Sie die Body-Verarbeitungs-Engine in „URL-CODED"
In „phase:2“ (REQUEST_BODY-Phase) wird eine Übereinstimmung mit der Klartextzeichenfolge „eine_ungültige_Zeichenfolge" und blockieren Sie die Anfrage mit dem Statuscode: 500.