Exercices — N11 Sécurité & Production

10 exercices pour construire un serveur Express production-ready : sécurité, variables d'environnement, gestion des erreurs.

EX1

helmet() — En-têtes de sécurité HTTP

Ajoutez helmet() à une app Express. helmet configure automatiquement une quinzaine d'en-têtes HTTP de sécurité (CSP, X-Frame-Options, etc.). Installez avec npm install helmet puis appelez app.use(helmet()).

EX2

cors() — Whitelist d'origines autorisées

Configurez cors() avec une whitelist d'origines autorisées. Passez un objet de configuration avec origin: [...] contenant les URLs autorisées (ex: 'http://localhost:3000'). Utilisez app.use(cors({ origin: [...] })).

EX3

express-rate-limit — Protection DDoS

Configurez express-rate-limit sur toutes les routes : fenêtre de 15 minutes (windowMs: 15 * 60 * 1000), maximum 100 requêtes par IP (max: 100). Appliquez avec app.use(limiter).

EX4

dotenv — Variables d'environnement

Chargez les variables d'environnement depuis un fichier .env avec require('dotenv').config() (en première ligne), puis utilisez process.env.PORT comme port du serveur. Créez aussi un fichier .env avec PORT=3011.

EX5

asyncHandler — Wrapper pour routes async

Écrivez la fonction asyncHandler qui prend une fonction fn et retourne un middleware (req, res, next). Le middleware appelle Promise.resolve(fn(req, res, next)).catch(next) pour propager automatiquement les erreurs async vers Express.

EX6

Error handler production-ready

Écrivez un middleware d'erreur avec 4 paramètres (err, req, res, next) qui : retourne le status 500 par défaut, affiche err.message en développement mais un message générique en production. Vérifiez process.env.NODE_ENV ou une variable isDev.

EX7

.env.example — Template des variables

Créez le contenu d'un fichier .env.example avec au minimum : PORT, JWT_SECRET et NODE_ENV. Le fichier .env.example est commité dans git, pas .env. Ajoutez aussi des variables optionnelles utiles.

EX8

Validation des variables d'environnement au démarrage

Vérifiez que toutes les variables requises existent dans process.env au démarrage. Si une variable est manquante, loggez une erreur et appelez process.exit(1) pour arrêter immédiatement le processus. Itérez avec forEach() sur un tableau de noms de variables.

EX9

En-têtes de sécurité sans helmet

Créez un middleware qui ajoute manuellement deux en-têtes de sécurité : X-Content-Type-Options: nosniff (empêche le MIME sniffing) et X-Frame-Options: DENY (empêche le clickjacking). Utilisez res.setHeader('Nom', 'Valeur') puis appelez next().

EX10

morgan — Logger uniquement en développement

Configurez morgan('dev') pour logger les requêtes HTTP, mais uniquement en développement. Utilisez une condition if (process.env.NODE_ENV !== 'production') avant app.use(morgan('dev')).

← Cours Mini-projet →