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
DOMPurifypara 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 atributosandbox. O navegador restringe a execução de scripts em arquivos carregados via<img>. - Configure o Header
Content-Security-Policypara 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.