flawopen.com/XSS em JavaScript/Svelte
Svelte é seguro contra XSS por padrão?
Pense em `{comment}` como imprimir um bilhete: os sinais de menor e maior continuam visíveis como texto. `{@html comment}` é como pedir ao tipógrafo que trate os sinais da página como instruções de diagramação. Se vierem de uma fonte não confiável, o navegador poderá interpretá-los como HTML e causar XSS.
<p>{@html comment}</p>
// o valor é interpretado como marcação HTML
<p>{comment}</p>
// escapado automaticamente
A regra
Svelte compila a saída comum de {expression} como texto escapado; o valor não é interpretado como marcação HTML. Já {@html} renderiza uma string HTML de propósito. A documentação do Svelte alerta que, para evitar XSS, o valor deve ser escapado ou controlado. Trate-o como um ponto de inserção HTML sensível à segurança e use um sanitizador mantido quando precisar de texto rico escrito por usuários.
Como verificar seu código
Pesquise `{@html}` nos arquivos `.svelte`. Para cada ocorrência, rastreie a origem do valor e todas as transformações. Considere entrada de usuário, dados externos e conteúdo de usuário armazenado como não confiáveis. Se o conteúdo deve ser texto, use `{expression}`. Se HTML rico for necessário, sanitize-o com uma biblioteca HTML mantida e teste se a marcação não permitida é removida.
grep -rn "{@html" --include="*.svelte" .HTML rico: preserve o limite da sanitização
Use `{expression}` quando o conteúdo deve aparecer como texto. Se leitores precisarem criar HTML, sanitize o conteúdo final com um sanitizador HTML mantido, como o DOMPurify, antes de passá-lo para `{@html}`. Não concatene nem altere o resultado sanitizado depois, pois isso pode invalidar a proteção. Mantenha o sanitizador atualizado e permita apenas os elementos e atributos de marcação necessários ao produto. A sanitização de HTML não torna o mesmo valor seguro em contextos JavaScript, CSS ou URL.
Referências
- Documentação do Svelte — {@html ...}
- flawopen.com — XSS em JavaScript
- DOMPurify — project documentation
- OWASP — Cross Site Scripting Prevention