Sécurité
Mesures de sécurité implémentées
🔐 Sécurité
Protection des Données (At Rest)
- Chiffrement PGP Natif : Les données identifiantes (PII) comme l'email, le nom d'affichage et le secret 2FA sont chiffrées dans PostgreSQL via
pgcrypto(pgp_sym_encrypt).
Sécurité des Clés
Les clés de déchiffrement ne sont jamais stockées en base de données. Elles sont injectées via les variables d'environnement au démarrage du service.
- Hachage aveugle (Blind Indexing) : Pour permettre la recherche et l'unicité sur les données chiffrées (comme l'email), un hash non réversible (SHA-256) est stocké séparément (
email_hash). - Hachage des mots de passe : Utilisation d'Argon2id (via
@node-rs/argon2), configuré selon les recommandations de l'ANSSI pour résister aux attaques par force brute et par table de correspondance.
Sécurité des Communications (In Transit)
- TLS 1.3 : Assuré par le reverse proxy Caddy avec renouvellement automatique des certificats Let's Encrypt.
- Protocoles d'Authentification :
- Sessions (iron-session) : Utilisation de cookies sécurisés,
HttpOnly,SecureetSameSite: Strict. Les tokens (JWT) sont stockés dans ces cookies chiffrés côté serveur, empêchant tout accès via JavaScript (XSS). - API Keys : Les clés API sont hachées en base de données (SHA-256) via la colonne
key_hash. Seul un préfixe est conservé en clair pour l'identification.
- Sessions (iron-session) : Utilisation de cookies sécurisés,
Infrastructure & Surveillance
Antivirus (ClamAV)
Scan systématique de tous les fichiers entrants avant stockage.
Sentry
Suivi des erreurs en temps réel avec respect strict du RGPD.
Rate Limiting
Protection contre le brute-force et le DoS via NestJS Throttler.
RBAC
Contrôle d'accès granulaire basé sur les rôles et permissions.
- CORS Policy : Restriction stricte des origines autorisées, configurée dynamiquement selon l'environnement.
- Security Headers : Utilisation de
helmetpour activer les protections standards des navigateurs (XSS, Clickjacking, etc.). - Audit Logs : Traçabilité complète des actions sensibles via la table
audit_logs. Elle enregistre l'action, l'entité concernée, les détails au format JSONB, ainsi que l'IP hachée et le User-Agent pour l'imputabilité.