Tengo un valor de campo de entrada que se usa para formar la consulta XPath. ¿Qué símbolos de la cadena de entrada debo verificar para minimizar la posibilidad de inyección de XML?Cómo evitar la inyección XML
Respuesta
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 \
.
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?
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.
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.
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!
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
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
- 1. ¿Cómo puedo evitar la inyección de DLL
- 2. Cómo prevenir la inyección de XPath/XML en .NET
- 3. ¿cómo puedo evitar la inyección de SQL con ColdFusion
- 4. ¿Dónde usar mysql_real_escape_string para evitar la inyección SQL?
- 5. cómo evitar [Content_Types] .xml en la clase de .NET ZipPackage
- 6. Cómo confirmar la inyección SQL
- 7. Cómo limpiar SQL dinámico en SQL Server: evitar la inyección SQL
- 8. ¿Cómo evitar la inyección SQL en una consulta SQL con el operador Like utilizando los parámetros?
- 9. Cómo evitar la inyección de SQL en un campo de texto de JavaScript?
- 10. cómo evitar la inyección de SQL en un sitio web asp.net
- 11. Evitar advertencias XML DOMDocument en php
- 12. La mejor manera de evitar la inyección de código en PHP
- 13. inyección mongoDB
- 14. Evitar la descarga de DTD al analizar XML
- 15. ¿Cómo evitar que Eclipse intente ejecutar archivos XML?
- 16. ¿Cómo impide SQLParameter la inyección de SQL?
- 17. ¿Cómo puedo evitar que XML :: XPath obtenga una DTD mientras procesa un archivo XML?
- 18. Cómo incrustar xml en xml
- 19. Cómo evitar la locura del constructor de Dependency Injection?
- 20. Prevención de la inyección SQL en Ibatis
- 21. ¿Cómo puedo evitar los ataques de inyección SQL en mi aplicación ASP.NET?
- 22. Está reemplazando: < and > con <y> suficiente para evitar la inyección de XSS?
- 23. ¿Es sqlite3_bind_text suficiente para evitar la inyección de SQL en el iPhone
- 24. Algoritmo para evitar la inyección SQL en el servidor MSSQL desde el código C#?
- 25. inyección WCF La dependencia y la fábrica de resumen
- 26. Cómo XML configura Spring Bean para inyección de constructor cuando bean tiene varargs constructor
- 27. PersistenceContext EntityManager NullPointerException inyección
- 28. Cómo evitar la codificación HTML para expresiones incrustadas en XML Literals (VB.NET)?
- 29. (Zend Framework> Zend_Config) ¿Cómo evitar el uso de la configuración .ini o .xml?
- 30. Cómo evitar que la clase PrettyPrinter XML de Scala elimine las líneas nuevas
me parece que - igual que con la inyección de SQL - la el uso de las variables XPath previene la inyección. – kdgregory
¿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
@frankadelic: http: //msdn.microsof t.com/en-us/library/system.xml.xsl.xsltcontext.resolvevariable.aspx –