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.