TW3 — Technologies du Web 3

🔒 Bonnes Pratiques de SĂ©curisation dans les SystĂšmes d'Authentification

Pour garantir la sĂ©curitĂ© des systĂšmes d’authentification, il est essentiel d’adopter des pratiques reconnues pour protĂ©ger les donnĂ©es sensibles, prĂ©venir les attaques, et renforcer la confiance des utilisateurs.

Pourquoi ces pratiques comptent

Protéger les données sensibles, prévenir les attaques et renforcer la confiance des utilisateurs passe par deux domaines clés : le stockage sécurisé des mots de passe et l'utilisation de headers HTTP pour durcir les applications.


🔐 Stockage SĂ©curisĂ© des Mots de Passe

Les mots de passe des utilisateurs doivent toujours ĂȘtre protĂ©gĂ©s, mĂȘme en cas de compromission du systĂšme. Voici les bonnes pratiques pour garantir leur sĂ©curitĂ©.

Pourquoi ne pas stocker les mots de passe en clair ?
Si une base de donnĂ©es contenant des mots de passe non hachĂ©s est compromise, les utilisateurs sont directement exposĂ©s. Cela peut avoir des consĂ©quences graves, car beaucoup rĂ©utilisent les mĂȘmes mots de passe sur plusieurs services.


a. Utiliser des Algorithmes de Hachage Sécurisés
Le hachage consiste Ă  transformer un mot de passe en une chaĂźne illisible. Toutefois, les algorithmes doivent ĂȘtre adaptĂ©s aux exigences de sĂ©curitĂ© modernes.

Exemple concret : un mĂȘme mot de passe ne doit jamais produire un stockage facile Ă  comparer ou Ă  rĂ©utiliser entre deux utilisateurs.

  1. bcrypt :

    • Algorithme populaire pour le hachage des mots de passe.
    • Inclut un "salt" (valeur alĂ©atoire ajoutĂ©e) pour protĂ©ger contre les attaques par tables de hachage prĂ©-calculĂ©es (rainbow tables).
    • PossibilitĂ© de configurer le "coĂ»t" pour ralentir le calcul du hachage, rendant les attaques par force brute moins efficaces.

    Exemple (Node.js) :

    const bcrypt = require('bcrypt');
    const saltRounds = 10;
    
    const hashPassword = async (password) => {
        const hashed = await bcrypt.hash(password, saltRounds);
        console.log('Mot de passe haché :', hashed);
    };
    
    hashPassword('monMotDePasse123');
  2. Argon2 :

    • ConsidĂ©rĂ© comme l’algorithme le plus sĂ©curisĂ© pour le hachage des mots de passe (vainqueur du Password Hashing Competition en 2015).
    • Conçu pour ĂȘtre rĂ©sistant aux attaques matĂ©rielles grĂące Ă  une consommation Ă©levĂ©e de mĂ©moire.
    • IdĂ©al pour les environnements oĂč la sĂ©curitĂ© est une prioritĂ©.

    Exemple (Node.js) :

    const argon2 = require('argon2');
    
    const hashPassword = async (password) => {
        const hashed = await argon2.hash(password);
        console.log('Mot de passe haché :', hashed);
    };
    
    hashPassword('monMotDePasse123');

b. Éviter les Algorithmes Obsolùtes

  • MD5 et SHA-1 sont considĂ©rĂ©s comme vulnĂ©rables et ne doivent jamais ĂȘtre utilisĂ©s pour le hachage des mots de passe.

Erreur fréquente

MD5 et SHA-1 ne sont pas adaptés aux mots de passe parce qu'ils sont trop rapides à calculer. Pour un mot de passe, on veut au contraire un algorithme volontairement coûteux comme bcrypt ou argon2.


c. Autres Bonnes Pratiques

  1. Toujours hacher les mots de passe avant de les stocker en base de données.
  2. Ajouter un salt unique pour chaque utilisateur pour empĂȘcher les attaques par tables arc-en-ciel.
  3. Configurer des politiques de rotation et de renforcement des mots de passe.

🔒 Utilisation des Headers de SĂ©curitĂ©

Les headers HTTP peuvent ĂȘtre configurĂ©s pour ajouter une couche supplĂ©mentaire de protection contre les attaques courantes.


a. Content Security Policy (CSP)
Le header Content-Security-Policy limite les sources de contenu autorisées (scripts, styles, images, etc.) pour prévenir les attaques XSS (Cross-Site Scripting).

Exemple :

Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.google.com
  • default-src 'self' : N’autorise que le contenu provenant du mĂȘme domaine.
  • script-src 'self' https://apis.google.com : N’autorise les scripts que depuis le domaine local ou apis.google.com.

Avantages :

  • RĂ©duit le risque d'exĂ©cution de scripts injectĂ©s.
  • Offre une protection contre les attaques par script malveillant.

b. HTTP Strict Transport Security (HSTS)
Le header Strict-Transport-Security force le navigateur Ă  n’accepter que des connexions sĂ©curisĂ©es (HTTPS), mĂȘme si l'utilisateur tente d'accĂ©der au site via HTTP.

Exemple :

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age=31536000 : DĂ©finit une durĂ©e de 1 an (en secondes) pour l'obligation d'utiliser HTTPS.
  • includeSubDomains : Étend cette rĂšgle aux sous-domaines.

Avantages :

  • EmpĂȘche les attaques par interception sur les connexions non sĂ©curisĂ©es (downgrade attacks).

c. X-Content-Type-Options
Ce header empĂȘche le navigateur d’interprĂ©ter un fichier en tant que type MIME diffĂ©rent de celui dĂ©clarĂ©. Cela protĂšge contre certains types d'attaques.

Exemple :

X-Content-Type-Options: nosniff

Avantages :

  • PrĂ©vient l’exĂ©cution non dĂ©sirĂ©e de contenu mal interprĂ©tĂ©.

d. X-Frame-Options
Ce header empĂȘche une page web d’ĂȘtre chargĂ©e dans un cadre (iframe), rĂ©duisant les risques d’attaques Clickjacking.

Exemple :

X-Frame-Options: DENY

Options possibles :

  • DENY : EmpĂȘche complĂštement l'affichage dans une iframe.
  • SAMEORIGIN : Autorise uniquement les iframes provenant du mĂȘme domaine.

e. Referrer-Policy
Ce header contrĂŽle les informations envoyĂ©es dans l'en-tĂȘte Referer lorsqu’un utilisateur clique sur un lien.

Exemple :

Referrer-Policy: no-referrer-when-downgrade
  • no-referrer-when-downgrade : Envoie le rĂ©fĂ©rent uniquement pour des connexions sĂ©curisĂ©es (HTTPS).

đŸ§Ÿ RĂ©sumĂ© des Bonnes Pratiques

PratiqueOutil/MéthodeBénéfices
Stockage sécurisé des mots de passebcrypt, Argon2Protection contre les attaques en cas de fuite.
Limitation des scripts externesContent Security Policy (CSP)Protection contre XSS et scripts malveillants.
Forcer HTTPSHTTP Strict Transport Security (HSTS)Sécurisation des connexions réseau.
Éviter le clickjackingX-Frame-OptionsEmpĂȘche les attaques par iframe malveillantes.
Limiter les types MIMEX-Content-Type-OptionsPrévention contre les interprétations incorrectes.
ContrÎler les données de référentsReferrer-PolicyProtection de la vie privée et des URL sensibles.

Ces bonnes pratiques, combinĂ©es, contribuent Ă  renforcer la sĂ©curitĂ© des systĂšmes d'authentification en minimisant les vulnĂ©rabilitĂ©s. Elles devraient ĂȘtre intĂ©grĂ©es dĂšs le dĂ©but du dĂ©veloppement d'une application pour maximiser son niveau de protection.

Vérification rapide

Quiz du chapitre

2 questions
0 / 2 répondue0%
  1. 1Pourquoi ne faut-il pas utiliser MD5 ou SHA-1 pour hacher les mots de passe ?
  2. 2Quel header HTTP force le navigateur Ă  utiliser uniquement HTTPS, mĂȘme si l'utilisateur tente d'accĂ©der au site en HTTP ?
Répondez à toutes les questions pour valider.

Authentification

Terminez le quiz du chapitre pour le marquer comme complété.

Tableau de bord

On this page