FlawOpen

flawopen.com/XSS en JavaScript/Svelte

Svelte protège-t-il du XSS par défaut ?

Page de référence
En termes simples

Imaginez `{comment}` comme un billet imprimé : les chevrons restent visibles comme du texte. `{@html comment}`, c’est demander au typographe d’interpréter les marques de la page comme des consignes de mise en page. Si elles viennent d’une source non fiable, le navigateur peut les interpréter comme du HTML et provoquer un XSS.

À RISQUE
<p>{@html comment}</p>
// la valeur est interprétée comme du balisage HTML
SÛR
<p>{comment}</p>
// échappé automatiquement

La règle

Svelte compile la sortie ordinaire de {expression} en texte échappé : la valeur n’est donc pas interprétée comme du balisage HTML. À l’inverse, {@html} rend volontairement une chaîne HTML. La documentation de Svelte précise que cette valeur doit être échappée ou maîtrisée pour prévenir le XSS. Traitez cette directive comme un point d’insertion HTML sensible et utilisez un assainisseur maintenu si du texte enrichi fourni par des utilisateurs est nécessaire.

Vérifier votre code

Recherchez `{@html}` dans les fichiers `.svelte`. Pour chaque occurrence, remontez à l’origine de la valeur et examinez toutes ses transformations. Considérez les entrées utilisateur, les données externes et les contenus utilisateur stockés comme non fiables. Si le contenu doit rester du texte, utilisez `{expression}`. Si du HTML enrichi est nécessaire, assainissez-le avec un assainisseur HTML maintenu et vérifiez que les balises interdites sont supprimées.

grep -rn "{@html" --include="*.svelte" .

HTML enrichi : préserver la frontière de sanitisation

Utilisez `{expression}` lorsque le contenu doit s’afficher comme du texte. Si les utilisateurs doivent créer du HTML, assainissez le contenu final avec un assainisseur HTML maintenu, comme DOMPurify, avant de le transmettre à `{@html}`. Ne concaténez et ne modifiez pas le résultat assaini ensuite : cela peut annuler la protection. Maintenez l’assainisseur à jour et n’autorisez que les éléments et attributs de balisage nécessaires au produit. L’assainissement HTML ne rend pas cette même valeur sûre dans des contextes JavaScript, CSS ou URL.

Références

À voir aussi Cross-Site Scripting (XSS, CWE-79) : fonctionnement et prévention dans chaque langage — flawopen.com Un téléversement SVG présente-t-il un risque XSS ? Risque XSS de Vue v-html WKWebView : HTML non fiable, sûr ? XSS réfléchi, stocké et DOM : quelles différences ? Risques de sécurité de addJavascriptInterface sur Android Angular : XSS, valeurs sûres et API de bypass