Skip to content

SVG-based attacks

Arquivos SVG (Scalable Vector Graphics) são baseados em XML, o que significa que podem conter tags <script> e outros elementos ativos que são executados pelo navegador.


O Risco

Renderizar um SVG enviado por um usuário (ex: foto de perfil) diretamente através de uma tag <img> ou injetando-o no DOM é um vetor direto para ataques de XSS.

  • Exemplo de SVG malicioso:
xml
<svg xmlns="http://www.w3.org/2000/svg">
  <script>alert('XSS via SVG')</script>
  <rect x="0" y="0" width="100" height="100" fill="blue" />
</svg>

Melhores Práticas

✅ Como fazer

  • Use bibliotecas como DOMPurify para sanitizar o conteúdo XML do SVG antes de renderizá-lo.
  • Se possível, renderize SVGs dentro de uma tag <img> ou através de um <iframe> com o atributo sandbox. O navegador restringe a execução de scripts em arquivos carregados via <img>.
  • Configure o Header Content-Security-Policy para restringir a execução de scripts inline.

❌ Como não fazer

  • Não injete o conteúdo de um arquivo SVG arbitrário diretamente no DOM usando dangerouslySetInnerHTML.
  • Não permita o upload de SVGs sem uma validação e limpeza rigorosa no servidor.