Files
adastra_api/docs/ENVIRONMENT_VARIABLES.md
T
julien 80cd96e006 chore(deps): add helmet, express-rate-limit, express-validator
Add production dependencies introduced in recent security commits.
Add docs/ENVIRONMENT_VARIABLES.md documenting TRUST_PROXY, SECRET,
SESSION_SECRET, and ALLOWED_ORIGINS with configuration guidance.
2026-04-26 23:52:09 +02:00

2.9 KiB

Variables d'environnement — Adastra API

Référence pour les variables sensibles ou non-triviales. Pour les valeurs par défaut et la liste exhaustive, voir config/env/.env.example.


TRUST_PROXY

Fichier concerné : src/createApp.js
Utilisé par : express-rate-limit (IP réelle du client), req.ip

Principe

Indique à Express combien de proxies se trouvent entre internet et le process Node. Sans cette valeur, req.ip retourne l'IP du proxy (127.0.0.1) au lieu de l'IP du client réel, ce qui rend le rate limiting inefficace (toutes les requêtes semblent venir de la même IP).

Valeurs selon la topologie

Environnement Topologie Valeur
Dev local Node exposé directement, pas de proxy ne pas setter (variable absente)
Prod — serveur seul nginx → Node sur le même serveur 1
Prod — cloud avec LB nginx → load balancer → Node 2
Confiance totale Tous les proxies de la chaîne X-Forwarded-For true (déconseillé)

Règle générale : TRUST_PROXY = nombre de proxies entre internet et Node.

Vérification empirique

Ajouter temporairement cette route et appeler /debug-ip depuis l'extérieur :

app.get('/debug-ip', (req, res) => {
    res.json({
        ip: req.ip,
        ips: req.ips,
        xForwardedFor: req.headers['x-forwarded-for']
    });
});
  • req.ip retourne l'IP réelle du client → valeur correcte
  • req.ip retourne 127.0.0.1 ou l'IP du proxy → augmenter de 1
  • req.ips est vide malgré un proxy → idem

Supprimer la route après vérification.

Implémentation actuelle

if (process.env.TRUST_PROXY) {
    app.set('trust proxy', parseInt(process.env.TRUST_PROXY, 10) || process.env.TRUST_PROXY);
}

Le cast parseInt(...) || process.env.TRUST_PROXY permet de passer soit un entier ("1"1) soit la chaîne "true".


SECRET

Fichier concerné : src/config/index.js
Utilisé par : signature JWT, HMAC-SHA256 des API keys, secret de session Express

Valeur obligatoire en production — le process refuse de démarrer si elle est absente. Générer avec :

node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"

SESSION_SECRET

Fichier concerné : src/createApp.js
Utilisé par : express-session

Indépendant de SECRET pour limiter la surface d'impact si l'un des deux est compromis. Même commande de génération que SECRET. Fallback sur SECRET si absent (rétrocompatibilité).


ALLOWED_ORIGINS

Fichier concerné : src/createApp.js
Utilisé par : CORS

Liste d'origines autorisées, séparées par des virgules. Si absente ou vide, CORS refuse toutes les origines cross-domain.

ALLOWED_ORIGINS=http://localhost:4200,http://localhost:4300

En production, indiquer uniquement le domaine du frontend (ex: https://adastra.example.com).