2010-07-27 16 views
17

Alguien (probablemente un bot) envió una solicitud a la siguiente dirección URL para mi aplicación ASP.NET 4.0 formularios web (que se ejecuta en IIS 7.0):¿Por qué usar una URL que contiene dos puntos considerados como una "solicitud potencialmente peligrosa"?

http://ipaddress-of-my-applications-domain/bla1.bla2.bla3.bla4.bla5:)

Esto causó un System.Web.HttpException. Recibí un correo electrónico de registro de ASP.NET HealthMonitoring que había configurado, diciéndome:

Se detectó un valor Request.Path potencialmente peligroso desde el cliente (:).

Seguimiento de la pila era:

System.Web.HttpRequest.ValidateInputIfRequiredByConfig() 
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context) 

¿Por qué es de dos puntos en la URL "potencialmente peligroso"? ¿Qué cosas peligrosas se pueden hacer con dicha URL? ¿Tengo algún agujero de seguridad aquí del que no tengo conocimiento?

¡Gracias por dar una explicación por adelantado!

Editar

He probado que los dos puntos en una cadena de consulta (como http://mydomain.com?Test=9:)) no causa esta excepción.

+0

Ver esta pregunta - http://stackoverflow.com/questions/2053132/is-a-colon-safe-for-friendly-url-use - No creo que sea un duplicado como tal, pero sí discute en dos puntos URL – ChrisF

+0

esta página en [URL codificación] (http://www.blooberry.com/indexdot/html/topics/urlencoding.htm) enumera los dos puntos en su tabla de caracteres reservados, pero no explica por qué se utiliza para. – ChrisF

+0

¡Gracias por el enlace! Pero esta pregunta parece más discutir si un dos puntos es "seguro" con respecto a la codificación URL. La excepción de ASP.NET que tuve parece más bien que podría haber una amenaza a la seguridad. – Slauma

Respuesta

19

en NTFS, una ruta de archivo determinado puede tener múltiples flujos de datos asociados. Además de la secuencia principal, también conocida como $DATA, puede haber otras, normalmente usadas para almacenar metadatos como el marcador de Zona de Internet en los archivos descargados.

Alternate Data Streams se accede utilizando un separador de dos puntos, p. Ej. file.dat:$DATA es una forma alternativa de decir file.dat. La presencia de ADS a través de la web ha causado a Microsoft algunos problemas de seguridad en el pasado (por ejemplo, devolver el código fuente de las páginas ASP en lugar de ejecutarlas), por lo que como precaución están bloqueando el uso de dos puntos en la parte de la ruta del URL, ya que la parte de la ruta a menudo se asigna al sistema de archivos (aunque no en su caso). Es menos probable que esto ocurra a partir de la cadena de consulta, por lo que no está bloqueada allí.

Esto está lejos de ser el peor falso positivo Se generará la Validación de solicitud. Sus características antiinyección son mucho peores. Personalmente siempre lo desactivaría, ya que es una función estúpida y rota que nunca puede hacer que tu webapp sea segura; solo la atención adecuada al escape de cuerdas (y la fuerte desinfección de todo lo que planee usar como nombre de archivo) puede hacer eso.

Existen otros caracteres que, incluso si desactiva la Validación de solicitud, no puede incluir una parte de ruta para el enrutamiento. En particular, las barras oblicuas (%2F, %5C y las secuencias de bytes que serían secuencias no válidas demasiado largas para UTF-8 que se resuelven igual) y el byte cero. Lo mejor es ser conservador sobre lo que pones en caminos en general.

+2

esto era una vuln real en NT4, p. http://www.securityfocus.com/bid/149/discuss – devio

+0

¡Gracias, gran explicación! Entonces, este control de seguridad y riesgo con los dos puntos es algo específico de MS-Windows. Una nota sobre su recomendación para desactivar la validación de solicitudes ASP.NET: lo hice página por página (para muchas páginas de la aplicación) y realizo las comprobaciones y codificaciones correctas a mano. Pero para ser sincero: su respuesta me convenció para que mejor NO lo apagara globalmente dado que el riesgo de seguridad que usted describe me parece bastante complejo y nunca antes lo había oído. ¿Qué otros peligros podría tener la verificación de validación de solicitud incorporada también? Si lo apago, tendré que conocer todos estos riesgos y proporcionar mis propias medidas. – Slauma

+3

Si está utilizando el valor 'bla1.bla2.bla3.bla4.bla5:)' solo como un parámetro de enrutamiento y nunca como un nombre de archivo real, no hay vulnerabilidad. (La desinfección de la entrada de usuario para usar como un nombre de archivo en Windows es una tarea difícil, mucho más complicada que solo este tema. Evite usar contenido proporcionado por el usuario para nombres de archivo en general.) No confíe en Validación de solicitud para nada, no lo hace y no puede protegerlo de vulnerabilidades en el caso general, y * bloqueará * entradas perfectamente válidas. – bobince

0

Esto se debe a la función de validación de solicitudes de ASP.NET, que evita que los clientes ataquen su sitio web. La función está habilitada por defecto.

El siguiente enlace explica mejor: http://www.asp.net/learn/whitepapers/request-validation

+0

¿Por qué un punto en una URL es un "ataque de inyección"? Conozco la función de validación de solicitudes, pero hasta ahora solo en el contexto de enviar valores de formularios que contienen etiquetas

  • 11. ¿Qué sucede si tengo dos asignaciones de servlet en web.xml que coinciden con una solicitud?
  • 12. ¿Qué dos puntos (:) significa definir una clase en C#?
  • 13. Anteponiendo "http: //" a una URL que ya no contiene "http: //"
  • 14. Cuándo usar dos puntos con un @selector
  • 15. ASP.NET MVC "Pet.Path potencialmente peligroso" con URL válida
  • 16. ¿Qué significan dos puntos en una declaración de CSS?
  • 17. En C, ¿qué significa dos puntos dentro de una declaración?
  • 18. JSLint marcar "comentario peligrosa"
  • 19. ¿Qué significa un dos puntos en una declaración struct, como: 1,: 7,: 16 o: 32?
  • 20. Utilice XPath para analizar el nombre del elemento que contiene dos puntos
  • 21. El compilador no se queja cuando terminé una línea con dos puntos y comas. ¿Por qué?
  • 22. ¿Por qué un inicializador que contiene una cadena literal es válido para inicializar una matriz `char`?
  • 23. Como llegar solicitud de URL en una solicitud .get/ajax jQuery $
  • 24. ¿Por qué es más lento que contiene?
  • 25. Compara dos (potencialmente) variables undef en perl
  • 26. cómo enviar una solicitud de URL asíncrona?
  • 27. ¿Cómo obtengo la URL de una solicitud?
  • 28. ¿De qué manera es `` fast_abs_path` "peligroso, pero potencialmente más rápido"?
  • 29. englobamiento/expansión nombre de ruta con dos puntos como separador
  • 30. Cómo usar dos números como una clave de mapa