Aller au contenu principal

Sécurité

Vue d'ensemble

Ce document recense les mesures de sécurité réellement implémentées dans tranoo-api, y compris les points d'attention connus.

Authentification

MesureImplémentationFichier
Token FirebaseverifyIdToken sur routes protégéesmiddlewares/auth.js
Session web dashboardX-Web-Session-Id + idle timeout 30 minmiddlewares/auth.js
Blocage utilisateurVérification User.isBlockedmiddlewares/auth.js
Rôles adminMiddleware role.jsmiddlewares/role.js

Headers requis (dashboard web)

Authorization: Bearer <Firebase ID token>
X-Client-Platform: web
X-Web-Session-Id: <uuid>

Protection anti-abus

MesureConfigurationFichier
Rate limiting auth40 req / 15 min par IP (configurable)middlewares/authRateLimit.js
CAPTCHA TurnstileSur POST /api/auth/register (web uniquement)middlewares/verifyCaptcha.js
OTP resetTTL court, tentatives limitéesconfig/authConfig.js

Variables : AUTH_RATE_LIMIT_MAX, AUTH_RATE_LIMIT_ENABLED, CAPTCHA_ENABLED, TURNSTILE_SECRET_KEY

Firebase App Check

  • Middleware verifyAppCheck.js implémenté
  • Non monté sur les routes actuellement
  • Activation : FIREBASE_APP_CHECK_ENFORCED=true + montage manuel dans app.js

Secrets et credentials

ÉlémentStockageNotes
.env, .env.prodGitignoredJamais committer
Firebase service accountFIREBASE_SERVICE_ACCOUNT_JSON (prod)Pas de fichier en prod
FeexPay tokenVariable d'environnement
WhatsApp tokenVariable d'environnement
CloudinaryVariables d'environnement

Fichier dev (gitignored) : src/firebaseServiceAccountKey.json

CORS

Configuration actuelle dans src/app.js :

app.use(cors({ origin: '*' }));

Point d'attention : toutes les origines sont autorisées. En production, restreindre aux domaines tranoo.store et apps mobiles si possible.

Endpoints publics sensibles

EndpointRisqueRecommandation
POST /api/notifications/testPas d'authRetirer en production
POST /api/upload/videoPas d'auth middlewareAjouter authMiddleware
POST /api/payments/webhookPublic (normal pour webhook)Valider signature FeexPay
GET|POST /api/whatsapp/webhookPublic (normal pour Meta)Vérification token Meta

Validation des entrées

  • Schémas Mongoose avec validation intégrée
  • Codes d'erreur stables (errorCodes.js) + messages localisés (apiResponse.js)
  • Validation téléphone : phoneNormalize.js, authAppPhone.js

Séparation des comptes

  • Email synthétique distinct par app (@tranoo.app vs pro_*@tranoo.app)
  • Un même numéro = deux comptes Firebase séparés (Tranoo vs Pro)
  • Refus de rôle croisé à l'inscription

Webhooks

WebhookVérification
FeexPayCallback serveur (à valider côté FeexPay)
WhatsApp MetaWHATSAPP_WEBHOOK_VERIFY_TOKEN sur GET

Logs sensibles

Variables de debug (désactiver en prod) :

  • LOG_OTP=true — affiche OTP en console
  • LOG_WHATSAPP=true — logs WhatsApp détaillés
  • NODE_ENV=development

Checklist production

  • NODE_ENV=production
  • LOG_OTP et LOG_WHATSAPP désactivés
  • POST /api/notifications/test désactivé
  • Secrets via variables d'environnement (pas de fichiers)
  • Turnstile configuré sur dashboard (CAPTCHA.md)
  • CORS restreint si possible
  • Firebase App Check activé si souhaité

Voir aussi