Cross-site scripting (XSS)
Avec une faille XSS, un contenu externe devient du code exécutable dans le navigateur. Le point décisif est la façon dont l’application affiche les entrées.
Le cross-site scripting, ou XSS, est une attaque dans laquelle du code externe s’exécute dans le navigateur dans le contexte d’un site touché. L’application insère des données non fiables dans une page de telle sorte que le navigateur les traite comme du contenu exécutable. Le code peut, par exemple, modifier la page affichée ou envoyer des requêtes avec les droits de la personne connectée.
Un commentaire dans un portail de projet
Un portail de projet fictif enregistre les commentaires dans le champ noteText, puis les montre aux autres membres de l’équipe. Le champ est prévu pour du texte ordinaire. Si son contenu est inséré comme du HTML sans vérification appropriée, des entrées spécialement conçues peuvent injecter du contenu exécutable. Enregistrer un commentaire dans sa propre base ne le rend pas fiable pour un affichage ultérieur. Les valeurs issues de systèmes connectés doivent aussi être traitées selon leur emplacement d’affichage.
Si le commentaire doit rester du texte, l’application utilise une méthode d’affichage textuel adaptée ou le rendu sûr proposé par défaut par son framework. Si du HTML mis en forme est volontairement autorisé, il faut une solution de nettoyage maintenue qui définit les contenus permis.
Le contexte de sortie détermine la protection
MDN et OWASP distinguent le traitement du texte, du HTML, des attributs et des autres contextes de sortie. Un encodage adapté au texte HTML ordinaire ne protège pas universellement JavaScript ou les URL. La seule validation des entrées ne remplace pas la protection lors de l’affichage.
Une Content Security Policy peut en complément limiter le code autorisé à s’exécuter. Elle ne remplace ni les points d’insertion sûrs ni le nettoyage HTML nécessaire. Le scénario du portail illustre cette distinction ; il ne décrit pas un test de sécurité réalisé.
Sources
Termes associés
- FrontendLe frontend est l’interface utilisée par les personnes. Les retours utiles dans le navigateur ne remplacent pas les contrôles faisant autorité côté serveur.
- JavaScriptJavaScript est un langage pour la logique applicative, dans le navigateur et ailleurs. Son rôle diffère de celui de HTML et CSS.
- HTMLHTML décrit la structure et le sens des contenus web. Il identifie notamment titres, tableaux et champs de saisie.
- Minimisation des donnéesLa minimisation limite les données personnelles à ce qui est adéquat, pertinent et nécessaire pour une finalité définie.
- Politique de conservation des donnéesUne politique de conservation définit finalité, début, durée et fin du stockage. Tâches de suppression et copies exigent une prise en compte technique.
- Chiffrement par enveloppeLe chiffrement par enveloppe sépare la clé des données de celle qui la protège. Le fichier chiffré et sa clé enveloppée doivent être gérés ensemble.
Votre projet avec ASES
Décrivez-nous votre projet. Nous revenons vers vous avec une première évaluation.