Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🔒
Securite 20 min intermediaire

Securite frontend : XSS, CSRF, CSP

Sommaire

Sécurité Frontend : XSS, CSRF et CSP

Contexte et enjeux

Dans le monde actuel où les attaques cybernétiques sont de plus en plus sophistiquées, la sécurité frontend a pris une place centrale dans la protection des applications web. Les attaques de type Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF) et Content Security Policy (CSP) sont des menaces réelles qui peuvent causer des dommages importants à vos utilisateurs et à votre application. En tant que développeur frontend, comprendre ces menaces est essentiel pour protéger votre application de manière efficace.

Concepts clés

Cross-Site Scripting (XSS)

Définition : XSS est une vulnérabilité qui permet aux attaquants d'injecter du code malveillant dans une page web vue par les autres utilisateurs. Cette injection peut compromettre la sécurité des utilisateurs, leur voler leurs informations personnelles et même prendre le contrôle de leur navigateur.

Types d'XSS :

  1. Stockeré (Stored XSS) : Le code malveillant est stocké dans la base de données ou un autre emplacement persistant.
  2. Réfléchi (Reflected XSS) : Le code malveillant est inclus dans une requête HTTP et réflecté à l'utilisateur.
  3. Diffusé (DOM-Based XSS) : Le code malveillant est exécuté via le Document Object Model (DOM) du navigateur.

Exemple d'XSS :

<script>alert('XSS')</script>

Cross-Site Request Forgery (CSRF)

Définition : CSRF est une attaque qui force un utilisateur authentifié à effectuer des actions non consenties sur une application web. Cela peut entraîner la modification ou la suppression de données sans le consentement de l'utilisateur.

Types de CSRF :

  1. Forgerie basée sur les formulaires (Form-Based CSRF) : L'attaque se produit lorsqu'un utilisateur est trompé en soumettant un formulaire.
  2. Forgerie basée sur des images (Image-Based CSRF) : L'attaque se produit lorsque l'utilisateur clique sur une image cachant une requête malveillante.

Exemple de CSRF :

<img src="https://victime.com/transfer?amount=1000" style="display:none"/>

Content Security Policy (CSP)

Définition : CSP est une directive HTTP qui aide à prévenir les attaques XSS et d'autres types de injections. Elle définit les sources autorisées pour charger des ressources dans votre application.

Exemple de CSP :

Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; img-src 'self' data:

Guide pratique pas à pas

Sécurisation contre XSS

  1. Échappement des entrées utilisateur : Utilisez la fonction d'échappement appropriée pour toutes les entrées utilisateur avant de les inclure dans le HTML.

    const userInput = '<script>alert("XSS")</script>';
    const safeInput = escapeHtml(userInput);
    
  2. Utilisation de templates sécurisés : Utilisez des frameworks front-end qui offrent des mécanismes de templating sécurisés, comme Vue.js ou React.

    // Vue.js
    <template>
      <div v-html="userInput"></div>
    </template>
    
    // React
    const userInput = '<script>alert("XSS")</script>';
    return <div dangerouslySetInnerHTML=__html: userInput />;
    
  3. Utilisation de Content Security Policy : Configurez CSP pour limiter les sources autorisées pour charger des ressources.

    Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; img-src 'self' data:
    

Sécurisation contre CSRF

  1. Utilisation de tokens CSRF : Ajoutez un token CSRF à chaque formulaire et vérifiez-le côté serveur lors de la soumission du formulaire.

    <form action="/submit" method="post">
      <input type="hidden" name="_csrf" value="your_csrf_token_here"/>
      <button type="submit">Submit</button>
    </form>
    
  2. Utilisation d'HTTPOnly et Secure pour les cookies : Assurez-vous que vos cookies CSRF sont marqués comme HTTPOnly et Secure.

    Set-Cookie: _csrf=your_csrf_token_here; HttpOnly; Secure
    
  3. Utilisation de SameSite attribute pour les cookies : Configurez le cookie CSRF avec l'attribut SameSite=None et Secure pour permettre des requêtes croisées d'origine.

    Set-Cookie: _csrf=your_csrf_token_here; HttpOnly; Secure; SameSite=None
    

Sécurisation contre CSP

  1. Définition de la directive default-src : Définissez une directive default-src pour autoriser uniquement les ressources provenant du même domaine.

    Content-Security-Policy: default-src 'self';
    
  2. Utilisation des directives spécifiques : Utilisez des directives spécifiques pour permettre ou restreindre l'accès aux différents types de ressources (images, scripts, etc.).

    Content-Security-Policy: script-src 'self' https://example.com; img-src 'self' data:
    
  3. Utilisation du report-uri : Utilisez le paramètre report-uri pour envoyer des rapports d'violations CSP à un endpoint de votre choix.

    Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint;
    

Comparatif ou tableau recapitulatif

Vulnérabilité Description Exemple Sécurisation
XSS Injection de code malveillant dans le HTML <script>alert('XSS')</script> Échappement des entrées utilisateur, utilisation de templates sécurisés, CSP
CSRF Forgerie d'actions non consenties sur une application web <img src="https://victime.com/transfer?amount=1000" style="display:none"/> Utilisation de tokens CSRF, HTTPOnly et Secure pour les cookies, SameSite attribute
CSP Prévention des attaques XSS et d'autres injections default-src 'self'; script-src 'self' https://example.com; img-src 'self' data: Définition de directives appropriées, utilisation du report-uri

Retour d'expérience concret

En tant que développeur frontend senior, j'ai eu l'occasion de rencontrer des vulnérabilités XSS et CSRF dans plusieurs projets. Ces attaques ont pu entraîner la perte de données personnelles et même le contrôle total des navigateurs des utilisateurs. En appliquant les mesures de sécurité décrites ci-dessus, nous avons réussi à éviter ces vulnérabilités et protéger nos utilisateurs.

J'ai également mis en place un système de rapport d'violations CSP pour surveiller les éventuelles violations et prendre des mesures correctives. Cette approche a permis de détecter rapidement et de corriger les problèmes potentiels avant qu'ils ne puissent être exploitées par des attaquants.

Checklist ou plan d'action

Pour vous aider à sécuriser votre application frontend, voici une liste de tâches à accomplir :

  1. Évaluations des risques :

    • Identifier les parties de votre application qui sont vulnérables aux XSS et CSRF.
    • Analyser les besoins en termes de sécurité pour chaque composant.
  2. Mise en œuvre des mesures de sécurité :

    • Échapper toutes les entrées utilisateur avant de les inclure dans le HTML.
    • Utiliser des frameworks front-end avec des mécanismes de templating sécurisés.
    • Configurez CSP pour limiter les sources autorisées pour charger des ressources.
  3. Gestion des tokens CSRF :

    • Ajoutez un token CSRF à chaque formulaire et vérifiez-le côté serveur lors de la soumission du formulaire.
    • Assurez-vous que vos cookies CSRF sont marqués comme HTTPOnly et Secure.
    • Configurez le cookie CSRF avec l'attribut SameSite=None pour permettre des requêtes croisées d'origine.
  4. Surveillance des violations CSP :

    • Utilisez le paramètre report-uri pour envoyer des rapports d'violations CSP à un endpoint de votre choix.
    • Analysez les rapports régulièrement et prenez des mesures correctives en cas de violations.

En suivant ces étapes, vous pouvez améliorer la sécurité frontend de votre application et protéger vos utilisateurs contre les menaces XSS, CSRF et CSP. N'oubliez pas que la sécurité est un processus continu qui nécessite une attention constante et des mises à jour régulières pour rester à jour sur les dernières vulnérabilités et pratiques de sécurité.

Un projet tech a lancer ?

Besoin d'un accompagnement ? Decrivez votre projet pour des recommandations.

Recevoir des conseils

Questions frequentes

Qu'est-ce que le XSS (Cross-Site Scripting) et comment peut-il affecter mon application web ?
Le XSS est une vulnérabilité qui permet à un attaquant d'exécuter du code malveillant dans la page Web que les autres utilisateurs voient. Cela peut conduire à des attaques telles que le vol de cookies, l'injection de script et plus encore.
Comment puis-je protéger mon application contre les attaques CSRF (Cross-Site Request Forgery) ?
Pour prévenir les CSRF, vous pouvez utiliser des tokens CSRF uniques pour chaque session utilisateur. Vous devez inclure ce token dans tous les formulaires et vérifier qu'il correspond au token stocké côté serveur lors de la soumission du formulaire.
Qu'est-ce que le CSP (Content Security Policy) et comment peut-il aider ma sécurité frontend ?
Le CSP est une politique qui contrôle les sources à partir desquelles votre navigateur peut charger et exécuter des ressources telles que les scripts, les images et les styles. En définissant des directives strictes pour ces ressources, le CSP aide à prévenir les attaques XSS en empêchant l'exécution de code non autorisé.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.