2009-11-13 3 views

Antwort

8

Ich weiß nicht, was Sie unter "Sicherheitslücke" verstehen, aber es gibt einen Fehler, den viele Leute mit CDATA-Abschnitten machen. Das passiert, wenn ein fauler Programmierer das Text-Escaping nicht wirklich versteht und versucht, den normalen Prozess von & -Encodierung von Sonderzeichen in XML zu vermeiden. Sie denken, sie mit wegkommen können:

print "<element><![CDATA["+textstring+"]]></element>"; 

und während dies in der Tat einen < oder & Charakter in textstring stoppen als Markup behandelt werden, es ist nicht wasserdicht, da Textstring eine ]]> Sequenz enthalten könnte, was zu:

<element><![CDATA[ Foo ]]> <bar>I'm an unexpected element!</bar> ]]></element> 

Dies ist eine XML-Injektion, die wie eine HTML-Injektion möglicherweise eine XSS-ähnliche Sicherheitswirkung haben könnte.

Sie müssten also noch einige Sequenzen in CDATA maskieren (normalerweise würden Sie eine ]]> Sequenz zwischen zwei CDATA-Abschnitten aufteilen). In der Praxis macht dies die Verwendung von CDATA nicht einfacher als nur & -codieren Sie Ihren Textinhalt auf die normale Weise. Es gibt also keinen Grund, jemals einen CDATA-Abschnitt zu verwenden.

0

Vulnerable zu was? Irgendein Injektionsangriff? CDATA weist den Parser an, den Inhalt zu übergeben, ohne ihn zu analysieren. Wenn Sie also Ihren XML-Code validieren, wird der CDATA-Abschnitt im Validierungsschritt nicht berücksichtigt.

Der Code, der den XML-Stream verwendet, sollte über die Schemaüberprüfung hinaus eine Art von Geschäftsvalidierung haben, sodass Sie nur ein Risiko haben, wenn Sie die Eingaben nicht überprüfen, bevor Sie sie verwenden.

2

Ein CDATA-Abschnitt ist einfach eine andere Möglichkeit, Zeichendaten in einem XML-Dokument darzustellen. Es bedeutet genau dasselbe wie jeder andere (Nicht-Tag) -Text in einem Dokument, außer dass es anders maskiert ist.

Es gibt keine zusätzliche "Sicherheitslücke", die mit CDATA zusammenhängt (abgesehen natürlich von Fehlern in Ihrer XML-Parsing-Bibliothek).

+0

Was passiert jedoch, wenn der zwischen cdata-Elementen eingegebene Text nicht vom Parser analysiert wird? Ein böswilliger Benutzer kann eine Art von Daten speichern, die alle Systembefehle der Zielanwendung extrahiert, da sie nicht vom XML-Parser analysiert werden. Ich denke, das ist eine Art von Vulnerabilität. – Madhan

+0

Nur weil der Inhalt in einem CDATA-Abschnitt nicht "&" -gebunden ist, heißt das nicht, dass ein Parser sie senden würde, um als Befehle ausgeführt zu werden, das wäre verrückt. Es wird genauso behandelt wie jeder andere Klartext. – bobince

+0

Daten in CDATA-Blöcken * werden vom Parser analysiert. Insbesondere sucht der XML-Parser nach der Endsequenz "]]>". Alles andere wird als Zeichendaten behandelt. –

Verwandte Themen