flawopen.com/XSS/Content-type sniffing
XSS por MIME sniffing: como a confusão de MIME chega ao navegador
O navegador usa o Content-Type da resposta para decidir como tratar os bytes. Se um app servir arquivos controlados por usuários com tipos ausentes ou incorretos, o MIME sniffing pode fazer algumas respostas se comportarem de modo inesperado. Envie o tipo correto e X-Content-Type-Options: nosniff e isole uploads da origem do app. O cabeçalho reduz um risco de interpretação do navegador; não sanitiza arquivos nem substitui controles de upload.
Como um upload pode atravessar a fronteira de documento
Imagine um app que aceita uploads e depois os serve na própria origem autenticada com Content-Type ausente ou incompatível. Se o navegador interpretar a resposta como documento HTML, a marcação do arquivo poderá se tornar ativa na origem do site. Isso cria risco de XSS armazenado ou confusão de conteúdo quando alguém abre o arquivo. A extensão e o tipo declarado na requisição de upload não comprovam o formato dos bytes.
Defina o tipo deliberadamente e isole downloads
HTTP/1.1 200 OK Content-Type: application/octet-stream // sem X-Content-Type-Options // mesma origem do app autenticado
HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 X-Content-Type-Options: nosniff Content-Disposition: attachment; filename="download.txt"
Use um Content-Type escolhido pelo servidor e compatível com os bytes; não copie o tipo declarado pelo remetente. X-Content-Type-Options: nosniff desativa o MIME sniffing em respostas de documento e bloqueia requisições de script ou stylesheet com tipo MIME incorreto. Não é uma correção universal de XSS: mantenha uploads em outra origem, prefira Content-Disposition: attachment para downloads e aplique regras de tamanho, autorização e validação de arquivos. Para imagens ou mídia inline, retorne o tipo verificado e teste a resposta real no navegador.
Perguntas frequentes
Não. Ele controla a interpretação MIME do navegador e a validação de scripts/stylesheets, mas não valida nem sanitiza arquivos, não corrige um Content-Type incorreto e não isola um upload na mesma origem. Use outra origem e downloads como anexos para arquivos não confiáveis.
Referências
- MDN — cabeçalho de resposta X-Content-Type-Options
- Padrão Fetch WHATWG — X-Content-Type-Options
- OWASP — cabeçalhos de segurança HTTP