Chapitre 22 – Sécurité JavaScript

La sécurité est une composante essentielle du développement web. Mal utilisée, JavaScript peut introduire des failles graves dans une application, notamment des attaques XSS ou des injections de code. Ce chapitre explore les principaux risques et les bonnes pratiques pour s'en prémunir.

Démonstration des vulnérabilités de sécurité

Les résultats des tests apparaîtront ici...

1. XSS (Cross-Site Scripting)

Le Cross-Site Scripting (XSS) consiste à injecter du code JavaScript malveillant dans une page web vue par d'autres utilisateurs.

Exemple d'injection XSS

<input value="<script>alert('XSS')</script>" />

Si ce contenu est réinjecté dans la page sans vérification, le script est exécuté.

Types de XSS

Attention aux risques XSS

Les attaques XSS peuvent voler des cookies de session, modifier le contenu de la page ou rediriger l'utilisateur vers des sites malveillants.

2. Injections de code

Les injections ne se limitent pas au XSS. Par exemple, exécuter du code dynamique avec eval() est très risqué :

// Mauvaise pratique dangereuse
let userInput = "alert('Hacked!')";
eval(userInput);

Ne jamais exécuter de code reçu d'un utilisateur sans validation stricte.

3. Bonnes pratiques de sécurité

Exemple sécurisé

// Sécurisé : insérer du texte sans danger
const div = document.createElement('div');
div.textContent = userInput;

// Alternative moderne avec sanitization
const safeHTML = DOMPurify.sanitize(userInput);
element.innerHTML = safeHTML;

Conseil de sécurité

Utilisez la bibliothèque DOMPurify pour nettoyer le HTML avant de l'insérer dans le DOM.

Résumé du chapitre

  • Les attaques XSS sont des injections de code malveillant dans les pages web.
  • Les injections de code comme eval() peuvent être dangereuses si mal utilisées.
  • Évitez l'usage de innerHTML avec des données non sûres.
  • Adoptez des fonctions sécurisées comme textContent pour manipuler le DOM.
  • Respectez les bonnes pratiques et utilisez des outils/frameworks modernes pour renforcer la sécurité.

La sécurité doit être pensée dès le départ et non ajoutée après coup. Protéger vos utilisateurs, c'est protéger votre application.