Skip to content

Upload e Renderização de Arquivos

Arquivos enviados por usuários (imagens, documentos, vídeos) são vetores de ataque comuns. Eles podem ser usados para distribuir malware, realizar ataques XSS (especialmente com SVGs) ou explorar vulnerabilidades nos codecs do navegador.

Cuidados por Tipo de Arquivo

1. Imagens (PNG, JPG, WEBP)

  • Valide o tipo MIME no servidor, não confie apenas na extensão do arquivo.
  • No Front-end, utilize URLs seguras (URL.createObjectURL ou Base64 sanitizado) para exibição.

2. SVG (Extremamente Perigoso)

Arquivos SVG são documentos XML que podem conter tags <script>.

  • Sanitização: Sempre passe o XML do SVG por um sanitizador (como o DOMPurify) antes de injetá-lo no DOM.
  • Modo Seguro: Prefira usar SVGs dentro de tags <img> (ex: <img src="logo.svg">). Nesse modo, o navegador não executa nenhum script contido no SVG por segurança.

3. Vídeos e PDFs

  • Utilize as tags nativas <video> e os visualizadores de PDF nativos do navegador, que rodam em sandbox.
  • Não utilize plugins externos como Flash ou Silverlight (obsoletos e inseguros).

Como fazer vs Como não fazer

✅ Como fazer

  • Realize o upload para um domínio de ativos separado (ex: assets.portal.com) para isolar os cookies da aplicação principal.
  • No Backend, utilize ferramentas de scan de vírus e renomeie arquivos para evitar injeção de nomes de arquivos maliciosos.
  • No Front-end, sanitize qualquer arquivo que precise ser lido e processado pelo JavaScript.

❌ Como não fazer

  • Nunca injete o código XML de um SVG diretamente no DOM sem sanitização.
  • Não permita o upload de arquivos executáveis (.exe, .sh, .bat) ou scripts (.js, .php).
  • Não exiba nomes de arquivos originais diretamente no HTML sem fazer o escape (risco de XSS no nome do arquivo).