2008-12-12 14 views

Respuesta

1

Comenzaría considerando la entrada válida para su caso de uso particular y luego buscaré la manera de restringir todo lo demás. Si tiene un rango fijo de valores de entrada, limitaría la entrada solo a esos valores. De lo contrario, si su caso de uso requiere que tenga en cuenta el futuro, es probable que desee comprobar si hay modificadores de eje y separadores de ruta como : y \.

1

Depende de lo que quiere decir con 'inyección XML'. ¿Hay partes del documento que son sensibles y que el usuario no puede ver? ¿O lo está abriendo como un estado de escritura y permitiendo al usuario actualizar partes del documento, y solo se les debe permitir actualizar ciertas partes?

En un nivel básico para responder a su pregunta que hay que buscar para las operaciones de los ejes de XPath (por ejemplo //, /, ::) y comodines (@*, *) como mínimo. Pero mi sensación es que usar la entrada del usuario para construir directamente xpath puede no ser la solución óptima. ¿Tal vez si nos da más contexto sobre lo que está tratando de lograr, podríamos sugerir enfoques alternativos?

7

Este document describe en detalle el concepto de "Blind XPath Injection".

Proporciona ejemplos concretos de inyecciones de XPath y analiza formas de prevenirlas.

En la sección "La defensa contra XPath inyección" Se dice:

"La defensa contra XPath inyección es esencialmente similar a la defensa contra la inyección de SQL La aplicación debe desinfectar la entrada del usuario concreto, el único.. y los caracteres de comillas doble deben ser rechazados. Esto puede hacerse en la aplicación , o en un producto de terceros (por ejemplo, cortafuegos de aplicaciones). La susceptibilidad de la aplicación de prueba a XPath Injection puede realizarse fácilmente mediante . una comilla doble e inspeccionando la respuesta. Si se ha producido un error , entonces es probable que una inyección XPath es posible."

Como otros han dicho, también hay que prestar atención a la utilización de ejes y la // abreviatura. Si se está utilizando XPath 2.0, a continuación, no se debe permitir la función doc(), ya que da acceso a cualquier documento con URI (o nombre de archivo) conocido.

Se recomienda utilizar una API que precompila una expresión XPath pero deja la posibilidad de que funcione con parámetros dinámicamente definidos o variables. Entonces la entrada del usuario definirá el contenido de estos parámetros solamente y nunca será tratada como una modificación de la expresión ya compilada.

+1

me parece que - igual que con la inyección de SQL - la el uso de las variables XPath previene la inyección. – kdgregory

+0

¿Podría dar un ejemplo sobre cómo suministrar "variables definidas dinámicamente" en la expresión XPath? Específicamente, ¿cómo haría esto en .NET? Lo he visto solo con la concatenación de cadenas. – frankadelic

+0

@frankadelic: http: //msdn.microsof t.com/en-us/library/system.xml.xsl.xsltcontext.resolvevariable.aspx –

6

Convierte tus tácticas al revés.

No trate de filtrar los caracteres no válidos - una política de "Supongamos que está bien a menos que sepa que es malo"

En cambio, el filtro de caracteres aceptables - una política de "Esta materia está bien, Asumiré que todo lo demás es malo ".

En términos de seguridad, adopte una política de "Denegar por defecto" en lugar de "Aceptar por defecto".

Por ejemplo ...

... si estás preguntando a alguien por un término de búsqueda, diga un nombre de las personas primero, limitar la entrada a sólo los caracteres que usted espera encontrar en los nombres.

Una forma sería limitar a A-Z y luego asegurarse de que su técnica de búsqueda sea acentuada (p. Ej. I = ì = í = î = ï y así sucesivamente), aunque esto no se aplica a los nombres no europeos.

... si usted está pidiendo un número, límite a sólo dígitos y rechazar todo lo demás.

0

Cerrando esta vulnerabilidad es sólo una revisión. Entonces, aplicar la política "Denegar por defecto" es demasiado peligroso ahora. decidí comprobar la entrada para los siguientes símbolos [ ",", *, =, {, \,., Espacio. Creo que esto podría prevenir los ataques más comunes Gracias a todos por las respuestas!

+0

Ah, el tipo de revisión que usted (o su sucesor) se amargura lamentar más tarde ... http: //en.wikipedia.org/wiki/Technical_debt – bortzmeyer

0

una validación de la . cadena de entrada será útil, tal vez, usando algo como una expresión regular (algo como esto^\ w +) sobre la base de que no se permitirán caracteres especiales

Cuestiones relacionadas