Aller au contenu principal

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

VersionStatusSupport Securite
2.x.xCurrentSupport complet
1.x.xLegacyCorrections critiques uniquement
< 1.0EOLAucun support

Reporter une vulnerabilite

Email : [email protected]

Inclure :

  1. Description de la vulnerabilite
  2. Etapes de reproduction
  3. Impact potentiel
  4. Suggestion de correction (optionnel)

Timeline de reponse

ActionDelai
Accusee de reception24-48h
Evaluation severite3-5 jours
Mise a jour statutTous les 7 jours
Deploiement fixSelon severite

Classification de severite

NiveauDescriptionReponse
CriticalRCE, SQL injection, auth bypass24-48h
HighData exposure, privilege escalation7 jours
MediumXSS, CSRF, info disclosure30 jours
LowMinor issues, best practices90 jours

Architecture de securite

MyTelevision API implemente une architecture de securite multi-couches :

  1. Authentication -- JWT + Firebase Social Auth
  2. Authorization -- RBAC avec hierarchie de roles
  3. Multi-tenant Isolation -- Isolation par tenant
  4. Rate Limiting -- Par profil, distribue via Redis
  5. Input Validation -- DTOs avec class-validator
  6. Security Headers -- Helmet.js (HSTS, CSP, X-Frame-Options)
  7. 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 :

GuardFonctionCouche
JwtAuthGuardValidation JWT (legacy)Authentication
AccountAuthGuardJWT multi-tenant + sessionAuthentication
RolesGuardControle d'acces base sur les rolesAuthorization
PermissionGuardPermissions fines (any/all modes)Authorization
TenantGuardIsolation multi-tenantTenant Isolation
ProfileGuardValidation du profil courantProfile Access
KidsProfileGuardControles parentaux (profils enfants)Parental Control
ParentalPinGuardVerification PIN parentalParental Control
StreamTokenGuardProtection du streaming (token, IP, limites)Streaming
ThrottlerGuardRate limiting globalRate Limiting
ProfileRateLimitGuardRate limiting par profilRate Limiting
ContentAccessGuardAcces 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

FeatureImplementation
Identity ProviderFirebase Authentication
Token FormatJWT (HS256)
Token VerificationFirebase Admin SDK
Session ManagementRedis avec rotation
Password PolicyMin 8 chars, complexite
MFA SupportVia Firebase

API Security

FeatureImplementation
Rate LimitingPar profil, Redis-based
Input Validationclass-validator DTOs
Output EncodingAuto-escaped
CORSWhitelist configurable
Security HeadersHelmet.js
Request Size10MB max

Data Protection

FeatureImplementation
Encryption at RestPostgreSQL TDE
Encryption in TransitTLS 1.3
Password Storagebcrypt (cost 12)
Sensitive DataJamais logge
PII HandlingGDPR-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

RisqueMitigation
A01 Broken Access ControlRBAC, guards, ownership checks
A02 Cryptographic Failuresbcrypt, TLS 1.3
A03 InjectionPrisma ORM, requetes parametrees
A04 Insecure DesignClean Architecture, revues de code
A05 Security MisconfigurationValidation env au demarrage
A06 Vulnerable ComponentsDependabot, npm audit
A07 Auth FailuresFirebase, rate limits, lockout
A08 Software Integritynpm audit, CodeQL SAST
A09 Logging FailuresLogging structure
A10 SSRFValidation URL, allowlist

Audit Logging

EvenementDonnees loguees
Tentatives de loginSucces/echec, IP, user agent
Token refreshProfile ID, device ID
Changements permissionsActeur, cible, modifications
Modifications compteActeur, modifications, timestamp
Echecs autorisationEndpoint, utilisateur, raison
Violations rate limitProfil, endpoint, compteur

Surface d'attaque

Endpoints totaux : 176+

CategorieEndpointsSans GuardRisque
Auth228Moyen
Contenu (public)45~40Faible (intentionnel)
Engagement153Faible
Profils/Devices202Moyen
Admin60+1Faible (RBAC)
Tenant/Config1010Faible (public)
Sante33Faible

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

  1. Jamais de secrets dans le code -- Utiliser ConfigService et variables d'environnement
  2. Valider toutes les entrees -- Utiliser les DTOs avec class-validator
  3. Utiliser les guards -- Ne jamais exposer un endpoint sensible sans guard
  4. Logger les evenements de securite -- Utiliser le logging structure
  5. Revue de code obligatoire -- Toute modification passe par PR

Best practices pour les administrateurs

  1. Rotation reguliere des secrets -- Suivre la politique de rotation
  2. Monitoring des alertes -- Surveiller Prometheus/Grafana
  3. Mises a jour regulieres -- Dependabot + npm audit
  4. Principe du moindre privilege -- Attribuer uniquement les roles necessaires
  5. MFA pour tous les admins -- Via Firebase Authentication