Prévention des XSS dans Vue
Échappement automatique de Vue, dangers de v-html, DOMPurify pour l’assainissement et types fiables
Prévention des XSS dans Vue est une leçon Vue Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Vue Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Vue Academy comprend 4 leçons au total.
Qu’est-ce que XSS
L’injection de scripts intersites (XSS) est une attaque au cours de laquelle un script malveillant est injecté dans une page et s’exécute dans le navigateur d’un autre utilisateur. Il peut voler des cookies, des jetons et des données. Vue vous protège par défaut, mais certaines pratiques peuvent créer de nouveau une faille.
Vue échappe automatiquement les interpolations
Le texte placé dans une interpolation entre doubles accolades {{ }} est automatiquement échappé en HTML. Une chaîne utilisateur contenant des balises est affichée comme du texte inoffensif et non exécutée.
<!-- userInput = "<script>alert(1)</script>" -->
<p>{{ userInput }}</p>
<!-- renders the literal text, no script runs -->La liaison d’attributs est également sûre
La liaison avec v-bind / :attr échappe également les valeurs. Des guillemets injectés ne peuvent donc pas sortir d’un attribut pour y injecter des gestionnaires.
<div :title="userInput">Hover me</div>Le danger de v-html
v-html définit directement innerHTML. Il n’échappe pas le contenu : tout balisage — y compris les scripts et les gestionnaires d’événements — est affiché comme du HTML actif.
<!-- DANGEROUS with untrusted input -->
<div v-html="userInput"></div>Comment v-html est exploité
Même sans balise de script, le HTML fourni par un attaquant peut exécuter du code au moyen d’attributs de gestionnaires d’événements ou de charges utiles img onerror.
// attacker-supplied value
const userInput = "<img src=x onerror=stealCookies()>";Règle : ne transmettez jamais une entrée utilisateur à v-html
La règle la plus simple consiste à ne jamais transmettre de contenu non fiable à v-html. Utilisez une interpolation simple, qui échappe le contenu, dès que la source est contrôlée par l’utilisateur.
Quand vous devez afficher du HTML
Vous avez parfois réellement besoin de HTML enrichi (le contenu d’un CMS ou le résultat d’une conversion Markdown). Dans ce cas, vous devez assainir le HTML avant de l’utiliser dans une liaison.
Assainir avec DOMPurify
DOMPurify supprime les balises et les attributs dangereux tout en conservant la mise en forme sûre. Installez-le et assainissez le contenu avant d’utiliser v-html.
npm install dompurifyAssainir puis lier
Faites passer la valeur par DOMPurify.sanitize dans une propriété calculée, puis liez le résultat nettoyé.
import DOMPurify from "dompurify";
import { computed } from "vue";
const safeHtml = computed(() =>
DOMPurify.sanitize(props.rawHtml)
);
// template: <div v-html="safeHtml"></div>Configurer les balises autorisées
Vous pouvez restreindre la liste d’autorisation afin que seules les balises attendues subsistent après l’assainissement.
DOMPurify.sanitize(html, {
ALLOWED_TAGS: ["b", "i", "em", "strong", "a", "p"],
ALLOWED_ATTR: ["href"]
});Autres sources à ne pas considérer comme fiables
Méfiez-vous également des URL : un attribut javascript: dans un lien lié peut exécuter du code. Validez ou assainissez les attributs href et ne construisez jamais de sources <script> dynamiques à partir de données utilisateur.
// reject dangerous protocols
const safe = /^https?:/.test(url) ? url : "#";Vérification rapide
Vous devez afficher du HTML fourni par un utilisateur. Quelle est la méthode sûre ?
Récapitulatif
Vue échappe automatiquement les interpolations {{ }} et les liaisons d’attributs, ce qui neutralise la plupart des attaques XSS. L’exception dangereuse est v-html, qui affiche du HTML brut. Ne lui transmettez jamais directement une entrée utilisateur ; lorsque du HTML enrichi est nécessaire, assainissez-le d’abord avec DOMPurify et considérez également les URL fournies par les utilisateurs comme non fiables.
Questions Fréquemment Posées
La leçon « Prévention des XSS dans Vue » est-elle gratuite ?
Oui — le texte complet de « Prévention des XSS dans Vue » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Vue Academy, passe à CoddyKit PRO. Le cours Vue Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Prévention des XSS dans Vue » ?
Échappement automatique de Vue, dangers de v-html, DOMPurify pour l’assainissement et types fiables Tu pratiques Vue Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Vue Academy ?
Aucune expérience préalable n'est requise. Vue Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Prévention des XSS dans Vue » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Vue Academy ?
Oui. Chaque leçon Vue Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Prévention des XSS dans Vue
- Content Security Policy (CSP) avec Vue
- Protection contre les CSRF dans les SPA Vue
- Modèles d’authentification sécurisée