Back-end · 4 mondes · 12 étapes

Auth & sécurité

Mots de passe, jetons signés, failles du web et autorisation, écrits de ses mains.

Progression

0 %

0/12 étapes terminées

Mode 7

Réviser vite, retenir longtemps

Des fiches express pour relire l'essentiel en deux minutes, des cartes mémoire qui reviennent au bon moment, et un jeu chronométré pour ancrer le vocabulaire.

« Résume les concepts les plus importants dans un guide clair et concis qui m'aide à réviser rapidement et à mémoriser les idées clés sans complexité inutile. »

Codey

Fiches express

L'essentiel, semaine par semaine

Semaine 1

5 points

Les mots de passe

  • On stocke une empreinte, jamais le mot de passe.
  • Fonction lente (PBKDF2, bcrypt, Argon2) et sel aléatoire par compte.
  • À la connexion : recalculer avec le sel du compte, puis comparer.
  • Comparer en temps constant.
  • Messages d'erreur neutres : « Identifiants invalides ».
const sel = hex(crypto.getRandomValues(new Uint8Array(16)));const empreinte = await hacher(motDePasse, sel);// stocker { pseudo, sel, empreinte }

À retenir : Si la base fuit demain, aucun mot de passe ne doit s'y lire.

Semaine 2

5 points

Les jetons signés

  • Un jeton : contenu encodé en base64url, un point, la signature.
  • HMAC garantit l'intégrité, pas la confidentialité.
  • Toujours vérifier la signature avant de lire le contenu.
  • L'expiration fait partie du contenu signé.
  • Cookie HttpOnly plutôt que localStorage.
const [contenu, signature] = jeton.split(".");if (signature !== await signer(contenu, secret)) return null;

À retenir : Rien de secret dans un jeton signé.

Semaine 3

5 points

Les failles du web

  • XSS : échapper le HTML, ou mieux, textContent.
  • Échapper & en premier.
  • Redirections : chemins internes seulement, jamais //.
  • Fichiers : pas de .., pas de séparateurs.
  • Listes blanches plutôt que listes noires.
texte.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")

À retenir : Une donnée ne doit jamais devenir une instruction.

Semaine 4

5 points

L'autorisation

  • Une table rôle → permissions, fermée par défaut.
  • Demander « as-tu le droit ? », pas « quel est ton rôle ? ».
  • Vérifier la propriété de chaque ressource.
  • Même 404 pour « inexistant » et « à un autre ».
  • Toujours côté serveur, jamais seulement dans l'interface.
if (!quete || quete.proprietaire !== qui.pseudo) {  return Response.json({ erreur: "Introuvable" }, { status: 404 });}

À retenir : Être connecté ne donne pas tous les droits.