2009-11-13 23 views

Respuesta

8

No sé qué quiere decir con ‘vulnerabilidad’, pero hay un error que muchas personas hacen con las secciones CDATA. Esto sucede cuando un programador perezoso no comprende realmente el escape de texto e intenta evitar el proceso normal de &, que codifica caracteres especiales en XML. Ellos piensan que pueden salirse con la suya:

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

y mientras este hecho va a parar a un personaje < o & en textstring ser tratado como el marcado, que no es a prueba de agua, porque TextString podría contener una secuencia ]]>, lo que resulta en:

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

Este es un XML-inyección, que al igual que una inyección de HTML podría potencialmente tener un impacto en la seguridad XSS-similares.

Por lo tanto, todavía tendría que escapar algunas secuencias en CDATA (por lo general, dividiría una secuencia ]]> entre dos secciones CDATA). En la práctica, el uso de CDATA no es más sencillo que el &, que consiste en codificar el contenido de texto de la forma habitual. Entonces realmente no hay razón alguna para usar una sección CDATA.

0

Vulnerable a qué? ¿Un ataque de inyección de algún tipo? CDATA le dice al analizador que pase los contenidos sin analizarlos, así que si está validando su XML, supongo que la sección CDATA se pierde en el paso de validación.

El código que utiliza la secuencia XML debe tener algún tipo de validación comercial más allá de la validación del esquema, por lo que solo correrá riesgos si no comprueba las entradas antes de usarlas.

2

Una sección CDATA es simplemente otra forma de representar datos de caracteres dentro de un documento XML. Significa exactamente lo mismo que cualquier otro texto (sin etiqueta) en un documento, excepto que se escapó de manera diferente.

No hay una "vulnerabilidad" adicional asociada con CDATA (excepto por los errores en su biblioteca de análisis XML, por supuesto).

+0

pero ¿qué sucede si el texto ingresado entre elementos de cdata no es analizado por el analizador? un usuario malintencionado puede mantener algún tipo de datos que extraiga todos los comandos del sistema de la aplicación de destino, ya que no es analizado por el analizador xml. Creo que este es un tipo de vulnerabilidad. – Madhan

+0

El hecho de que el contenido de una sección de CDATA no esté '& '-escaped no significa que un analizador los envíe para que se ejecute como comandos, eso sería una locura. Simplemente se manejará de la misma manera que cualquier otro texto sin formato. – bobince

+0

Los datos en bloques CDATA * son * analizados por el analizador. Específicamente, el analizador XML está buscando la secuencia final ']]>'. Todo lo demás se trata como datos de caracteres. –