¿Un tipo de contenido: encabezado de texto / sin formato protege contra XSS en los navegadores?

3

Estoy creando un pequeño script web que, en su mayoría, redirige el navegador pero tiene algunas condiciones de error cuando los parámetros de entrada no se pueden validar.

Me gustaría mostrar mensajes de error como el parámetro XXX tenía un valor no válido YYY , pero eso abriría el script a los ataques XSS si el valor del parámetro no se escapara correctamente antes de la salida. ¿Es lo suficientemente seguro simplemente para establecer el Content-Type de la respuesta en text/plain o son aún posibles los ataques XSS?

    
pregunta chiborg 19.08.2015 - 13:34
fuente

1 respuesta

8

No debe confiar en los navegadores que respetan el encabezado content-type para la seguridad. Un vistazo rápido a CVE-2010-1420 debería darte una idea. Detección de contenido El mecanismo implementado en los navegadores puede ser manipulado por los atacantes para desencadenar ataques XSS ( Contenido seguro para los navegadores web: una encuesta ).

Encuesta sobre los comportamientos de rastreo de contenido

Deacuerdoconestaencuesta,comopuedever,elnavegadorSafaripodríacausarunproblema,inclusosinoesunproblemaenotrosnavegadores(puedoagregarle Error 637981 a esta lista).

Ir más lejos:

Puede proteger aún más su aplicación permitiendo que su servidor web obligue al navegador a desactivar MIME Sniffing para el archivo servido:

  X-Content-Type-Options: nosniff

Dado que los ataques contra los que está intentando defenderse se podrían realizar a través de los archivos que puede permitir que sus visitantes suban hoy o mañana, puede forzar al navegador a presentar al usuario un cuadro de diálogo para guardar el archivo. Cuando se establece el encabezado noopen , el usuario no puede abrir el archivo directamente porque primero se lo forzará a guardar el archivo localmente, lo que evita que el archivo se renderice en el contexto actual del navegador. Puedes lograrlo mediante:

Content-Disposition: attachment; filename=untrustedfile.html

Además, en este último caso (es decir, si permite que los usuarios carguen archivos), puede agregar otra capa de seguridad a su aplicación web ( Risky sniffing ):

  • Use una lista blanca para asegurarse de que solo se permita una cantidad limitada de extensiones de archivo
  • Almacene los archivos cargados fuera de la raíz web y use un script de descarga seguro que carga estos archivos desde el disco y presenta sus contenidos al usuario;
  • Use nombres de archivo no predecibles y cambie la extensión del archivo.
respondido por el user45139 19.08.2015 - 13:55
fuente

Lea otras preguntas en las etiquetas