¿Voy a tener ataques XSS al hacer esto o se solicitará la descarga de un archivo?
¿Hay problemas de seguridad que podrían aumentar en un navegador moderno?
¿Voy a tener ataques XSS al hacer esto o se solicitará la descarga de un archivo?
¿Hay problemas de seguridad que podrían aumentar en un navegador moderno?
¿Voy a tener ataques XSS haciendo esto?
Sí.
El problema de sniffing de tipo de contenido text / plain- > text / html mencionado por curiousguy es el ataque más probable, pero también hay muchos más casos en los que los navegadores y complementos hacen sniffing de contenido; a menudo estos son inmunes a X-Content-Type-Options
y Content-Disposition:
.
Por ejemplo, el esquema de URL jar:
en los antiguos Firefoxen, los applets de Java y la inyección de la directiva de dominio cruzado de Flash ( loadPolicyFile
).
La única forma segura de servir contenido arbitrario no confiable sin estar en riesgo de XSS es servirlo desde un dominio diferente * que no comparte un origen con su sitio principal.
*: variantes: el dominio completo de segundo nivel con diferentes direcciones IP es el más estricto. Hay problemas con los applets que pueden hacer conexiones de red a la misma dirección IP incluso si el dominio es diferente en Java. El uso de un subdominio puede estar bien sujeto a limitaciones: si es files.example.com
, el sitio principal en ese caso tendría que estar en www.example.com
y no example.com
, para Evitar que el subdominio pueda leer las cookies del padre. Todavía puede escribir cookies, que en algunos casos pueden causar problemas. Usar una dirección IP directa para el contenido que no es de confianza es otra alternativa razonable si no desea comprar un dominio separado.
Algunos navegadores muy mal (especialmente las versiones antiguas de IE) intentan "snif" el tipo de contenido "verdadero" y actuarán como si el tipo de contenido fuera text/html
.
Tal vez pueda intentar agregar a la lista negra dichos navegadores, ya sea según el agente de usuario o proporcionando HTML como texto y verificando si el navegador ejecuta JavaScript en text/plain
.
Si desea que el navegador guarde el archivo en lugar de mostrarlo, intente Content-Disposition
(por ejemplo, Content-Disposition: Attachment; filename=example.txt
).
También puede usar X-Content-Type-Options: nosniff
encabezado HTTP específico de IE para evita que MIME-sniffing de los recursos text/plain
HTTP.
Los sitios que alojan contenido no confiable pueden usar la directiva nosniff para asegúrese de que los archivos de texto / sin formato no se encuentren en ninguna otra parte.
Lea otras preguntas en las etiquetas web-browser http xss web-hosting file-upload