Vue d'ensemble de la securite
Documentation complete sur la securite de MyTelevision API v2. Ce document couvre la politique de securite, les mecanismes de protection, l'inventaire des guards et la posture de securite globale du projet.
Politique de securite
Versions supportees
| Version | Status | Support Securite |
|---|---|---|
| 2.x.x | Current | Support complet |
| 1.x.x | Legacy | Corrections critiques uniquement |
| < 1.0 | EOL | Aucun support |
Reporter une vulnerabilite
Email : [email protected]
Inclure :
- Description de la vulnerabilite
- Etapes de reproduction
- Impact potentiel
- Suggestion de correction (optionnel)
Timeline de reponse
| Action | Delai |
|---|---|
| Accusee de reception | 24-48h |
| Evaluation severite | 3-5 jours |
| Mise a jour statut | Tous les 7 jours |
| Deploiement fix | Selon severite |
Classification de severite
| Niveau | Description | Reponse |
|---|---|---|
| Critical | RCE, SQL injection, auth bypass | 24-48h |
| High | Data exposure, privilege escalation | 7 jours |
| Medium | XSS, CSRF, info disclosure | 30 jours |
| Low | Minor issues, best practices | 90 jours |
Architecture de securite
MyTelevision API implemente une architecture de securite multi-couches :
- Authentication -- JWT + Firebase Social Auth
- Authorization -- RBAC avec hierarchie de roles
- Multi-tenant Isolation -- Isolation par tenant
- Rate Limiting -- Par profil, distribue via Redis
- Input Validation -- DTOs avec class-validator
- Security Headers -- Helmet.js (HSTS, CSP, X-Frame-Options)
- Audit Logging -- Evenements de securite structures
Inventaire des guards (12 guards)
Le systeme de securite repose sur 12 guards NestJS couvrant l'ensemble des couches de protection :
| Guard | Fonction | Couche |
|---|---|---|
JwtAuthGuard | Validation JWT (legacy) | Authentication |
AccountAuthGuard | JWT multi-tenant + session | Authentication |
RolesGuard | Controle d'acces base sur les roles | Authorization |
PermissionGuard | Permissions fines (any/all modes) | Authorization |
TenantGuard | Isolation multi-tenant | Tenant Isolation |
ProfileGuard | Validation du profil courant | Profile Access |
KidsProfileGuard | Controles parentaux (profils enfants) | Parental Control |
ParentalPinGuard | Verification PIN parental | Parental Control |
StreamTokenGuard | Protection du streaming (token, IP, limites) | Streaming |
ThrottlerGuard | Rate limiting global | Rate Limiting |
ProfileRateLimitGuard | Rate limiting par profil | Rate Limiting |
ContentAccessGuard | Acces contenu (FREE/PREMIUM/SUBSCRIPTION) | Content Access |
Chaine de guards (Defense in Depth)
@UseGuards(
TenantGuard, // 1. Identification du tenant
AccountAuthGuard, // 2. Verification authentification
RolesGuard, // 3. Verification du role
ProfileGuard, // 4. Validation du profil
ContentAccessGuard, // 5. Verification acces contenu
KidsProfileGuard, // 6. Application restrictions parentales
ProfileRateLimitGuard, // 7. Rate limiting par profil
)
@Get('premium-content/:id')
async getPremiumContent() { ... }
Mecanismes d'authentification
Systeme 1 : Legacy (User/UserSession)
- JWT HS256 avec refresh tokens
- Expiration access : 1h (corrige depuis 1d)
- Expiration refresh : 7d
- Tokens hashes SHA256 en base de donnees
Systeme 2 : Multi-tenant (Account/Profile/AccountSession)
- JWT HS256 avec token family tracking
- Expiration access : 1h (configurable)
- Expiration refresh : 7d
- Tokens hashes SHA256 en base de donnees
- Detection de reutilisation de tokens
- Rotation automatique des refresh tokens
Features de securite
Authentication
| Feature | Implementation |
|---|---|
| Identity Provider | Firebase Authentication |
| Token Format | JWT (HS256) |
| Token Verification | Firebase Admin SDK |
| Session Management | Redis avec rotation |
| Password Policy | Min 8 chars, complexite |
| MFA Support | Via Firebase |
API Security
| Feature | Implementation |
|---|---|
| Rate Limiting | Par profil, Redis-based |
| Input Validation | class-validator DTOs |
| Output Encoding | Auto-escaped |
| CORS | Whitelist configurable |
| Security Headers | Helmet.js |
| Request Size | 10MB max |
Data Protection
| Feature | Implementation |
|---|---|
| Encryption at Rest | PostgreSQL TDE |
| Encryption in Transit | TLS 1.3 |
| Password Storage | bcrypt (cost 12) |
| Sensitive Data | Jamais logge |
| PII Handling | GDPR-compliant |
Security Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000
Content-Security-Policy: default-src 'self'
Referrer-Policy: strict-origin-when-cross-origin
Rate Limiting
Short: 3 requests / 1 seconde
Medium: 20 requests / 10 secondes
Long: 100 requests / 1 minute
Cle: (tenant_id, profile_id, tier)
Le rate limiting est distribue via Redis et non contournable par changement de profil, device ou session.
OWASP Top 10 -- Mitigations
| Risque | Mitigation |
|---|---|
| A01 Broken Access Control | RBAC, guards, ownership checks |
| A02 Cryptographic Failures | bcrypt, TLS 1.3 |
| A03 Injection | Prisma ORM, requetes parametrees |
| A04 Insecure Design | Clean Architecture, revues de code |
| A05 Security Misconfiguration | Validation env au demarrage |
| A06 Vulnerable Components | Dependabot, npm audit |
| A07 Auth Failures | Firebase, rate limits, lockout |
| A08 Software Integrity | npm audit, CodeQL SAST |
| A09 Logging Failures | Logging structure |
| A10 SSRF | Validation URL, allowlist |
Audit Logging
| Evenement | Donnees loguees |
|---|---|
| Tentatives de login | Succes/echec, IP, user agent |
| Token refresh | Profile ID, device ID |
| Changements permissions | Acteur, cible, modifications |
| Modifications compte | Acteur, modifications, timestamp |
| Echecs autorisation | Endpoint, utilisateur, raison |
| Violations rate limit | Profil, endpoint, compteur |
Surface d'attaque
Endpoints totaux : 176+
| Categorie | Endpoints | Sans Guard | Risque |
|---|---|---|---|
| Auth | 22 | 8 | Moyen |
| Contenu (public) | 45 | ~40 | Faible (intentionnel) |
| Engagement | 15 | 3 | Faible |
| Profils/Devices | 20 | 2 | Moyen |
| Admin | 60+ | 1 | Faible (RBAC) |
| Tenant/Config | 10 | 10 | Faible (public) |
| Sante | 3 | 3 | Faible |
Scorecard securite : 98/100
Architecture Auth: 85/100 (Multi-tenant)
Centralisation des secrets: 90/100 (ConfigService)
Validation des variables: 98/100 (Joi+TRUST+AES)
Protection des fallbacks: 95/100 (Corrige)
Token Storage: 95/100 (SHA256 hash)
Token expirations: 90/100 (TTL=1h)
Rate limiting: 90/100 (+refresh)
Security Headers: 95/100 (Helmet full)
IP Validation: 98/100 (+25 tests)
Auth Guards: 98/100 (+68 tests)
RBAC PermissionGuard: 98/100 (+24 tests)
IDOR Protection: 95/100 (+14 E2E)
CI/CD Security Gates: 95/100 (CodeQL+Gates)
Pre-commit Hooks: 95/100 (Husky+lint)
Docker Production Security: 95/100 (secrets)
SCORE GLOBAL: 98/100
AUDIT VERDICT: PASS (Conditional)
Best practices pour les developpeurs
- Jamais de secrets dans le code -- Utiliser ConfigService et variables d'environnement
- Valider toutes les entrees -- Utiliser les DTOs avec class-validator
- Utiliser les guards -- Ne jamais exposer un endpoint sensible sans guard
- Logger les evenements de securite -- Utiliser le logging structure
- Revue de code obligatoire -- Toute modification passe par PR
Best practices pour les administrateurs
- Rotation reguliere des secrets -- Suivre la politique de rotation
- Monitoring des alertes -- Surveiller Prometheus/Grafana
- Mises a jour regulieres -- Dependabot + npm audit
- Principe du moindre privilege -- Attribuer uniquement les roles necessaires
- MFA pour tous les admins -- Via Firebase Authentication