Aller au contenu principal

Conformite

Documentation des mesures de conformite et des standards de securite pour MyTelevision API.

Vue d'ensemble de la conformite

MyTelevision API est concue pour satisfaire les standards et reglementations de securite suivants :

StandardStatutDescription
GDPRConformeRegulation europeenne protection des donnees
OWASP Top 10ImplementeSecurite des applications web
SOC 2 Type IIEn coursAudit des controles de securite
PCI DSSPartielSecurite des cartes de paiement

Conformite GDPR

Droits des personnes concernees

L'API fournit des endpoints pour supporter tous les droits GDPR :

DroitEndpointDescription
AccesGET /api/v2/users/meObtenir les donnees personnelles
RectificationPATCH /api/v2/users/meMettre a jour les donnees
EffacementPOST /api/v2/account-deletion/requestDemander la suppression
PortabiliteGET /api/v2/users/me/exportExporter les donnees
RestrictionPOST /api/v2/users/me/restrictRestreindre le traitement

Droit a l'effacement (Suppression de compte)

Processus de suppression

  1. L'utilisateur demande la suppression -- Le statut passe a PENDING_DELETION -- Email + Push envoyes
  2. Date de suppression planifiee (date courante + 30 jours)
  3. L'utilisateur peut annuler a tout moment avant la date planifiee -- Email de restauration envoye
  4. Si l'utilisateur se connecte pendant la retractation, le compte est automatiquement restaure
  5. 3 jours avant la suppression -- Email et push d'avertissement envoyes (cron 1:00 AM)
  6. Apres 30 jours, le cron job execute la suppression effective -- Email final envoye avant anonymisation

Actions de suppression

  • Toutes les sessions revoquees
  • Tous les appareils marques comme revoques
  • Tous les profils marques comme supprimes
  • Email anonymise pour re-inscription (deleted_<accountId>@deleted.local)
  • Compte soft-deleted avec timestamp deletedAt

Politiques de retention des donnees

Type de donneeRetentionJustification
Donnees de compteJusqu'a suppression + 30jPeriode de retractation
Historique visionnage1 anAmelioration du service
Logs de session90 joursMonitoring de securite
Logs d'audit7 ansConformite legale
Enregistrements paiement7 ansExigences fiscales
Tickets support3 ansContinuite de service

Minimisation des donnees

// Ne collecter que les donnees necessaires
interface MinimalUserData {
email: string; // Requis pour le compte
// firstName, lastName - Optionnel
// phone - Uniquement si 2FA active
// address - Uniquement si livraison requise
}

// Anonymiser les donnees dans les logs
const sanitizedLog = {
userId: user.id,
email: maskEmail(user.email), // j***@example.com
ip: maskIp(request.ip), // 192.168.xxx.xxx
};

Format d'export des donnees

{
"exportDate": "2025-01-15T10:00:00Z",
"user": {
"id": "uuid",
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"createdAt": "2024-01-01T00:00:00Z"
},
"profiles": [],
"watchHistory": [],
"favorites": [],
"subscriptions": [],
"payments": []
}

OWASP Top 10 -- Mitigations detaillees

A01 : Broken Access Control

ControleImplementation
RBACGuards bases sur les roles sur tous les endpoints
OwnershipValidation de propriete des ressources
CORSWhitelist stricte des origines
Rate limitingLimites de requetes par profil
// Exemple : Verification de propriete
@UseGuards(JwtAuthGuard, OwnershipGuard)
@Delete('profiles/:id')
async deleteProfile(@Param('id') id: string) {
// Seul le proprietaire peut supprimer
}

A02 : Cryptographic Failures

DonneeProtection
Mots de passebcrypt (cost 12)
Tokens JWTHS256
PINsbcrypt (cost 10)
TLS1.3 force
Au reposPostgreSQL TDE
Tokens stockesSHA256 hash

A03 : Injection

TypePrevention
SQLPrisma ORM (requetes parametrees)
NoSQLValidation de schema
CommandAucune execution de shell
XSSReponses auto-echappees
// Prisma previent l'injection SQL
const user = await prisma.user.findUnique({
where: { email: userInput }, // Parametre en securite
});

A04 : Insecure Design

PrincipeImplementation
Clean ArchitectureDesign en couches
Defauts securisesRefus par defaut
Defense en profondeurGuards multiples
Threat modelingRevues de securite

A05 : Security Misconfiguration

DomaineControle
EnvironnementValide au demarrage (Joi)
Dependancesnpm audit dans le CI
HeadersHelmet.js active
Messages erreurPas de stack traces en production
// Validation de l'environnement au demarrage
const configSchema = Joi.object({
JWT_SECRET: Joi.string().min(32).required(),
DATABASE_URL: Joi.string().uri().required(),
STREAMING_SIGNING_SECRET: Joi.string().min(32).required(),
// ...
});

A06 : Vulnerable Components

ControleFrequence
npm auditChaque build (CI)
DependabotPRs hebdomadaires
CodeQL SASTChaque PR
License checkChaque PR

A07 : Authentication Failures

ControleImplementation
Politique mot de passeExigences de complexite
Brute forceVerrouillage de compte
Token rotationRotation des refresh tokens
MFASupport 2FA via Firebase

A08 : Software and Data Integrity

ControleImplementation
Commits signesRequis pour main
Code reviewApprobations PR
CI/CD securiseGitHub Actions
Locks dependancespackage-lock.json

A09 : Security Logging and Monitoring

EvenementLogue
Tentatives authOui
Changements permissionsOui
Acces donneesOui
ErreursOui
Actions adminOui

A10 : SSRF Prevention

// Valider les URLs externes
const allowedDomains = ['api.tmdb.org', 'cdn.mytv.app'];

function validateExternalUrl(url: string): boolean {
const parsed = new URL(url);
return allowedDomains.includes(parsed.hostname);
}

PCI DSS -- Considerations

Reduction du perimetre

Le traitement des paiements est delegue a des providers conformes PCI :

  • Stripe -- Traitement des cartes
  • PayPal -- Paiement alternatif
  • Apple Pay / Google Pay -- Paiements mobiles

Donnees traitees

DonneeTraitement
Numeros de carteJamais stockes (tokenises par Stripe)
CVVJamais transmis a nos serveurs
IDs de transactionStockes pour reference
Montants paiementStockes pour facturation

Securite des webhooks

// Verifier les signatures des webhooks Stripe
@Post('webhooks/stripe')
async handleStripeWebhook(
@Body() payload: Buffer,
@Headers('stripe-signature') signature: string,
) {
try {
const event = stripe.webhooks.constructEvent(
payload,
signature,
process.env.STRIPE_WEBHOOK_SECRET,
);
// Traiter l'evenement verifie
} catch (err) {
throw new BadRequestException('Invalid signature');
}
}

Gestion des secrets

EnvironnementMethode
DeveloppementFichier .env (gitignored)
StagingDocker secrets
ProductionDocker secrets / Kubernetes secrets
# Docker Compose Production
services:
api:
secrets:
- jwt_secret
- db_password
environment:
JWT_SECRET_FILE: /run/secrets/jwt_secret

secrets:
jwt_secret:
external: true
db_password:
external: true

Securite reseau

# Kubernetes Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-network-policy
spec:
podSelector:
matchLabels:
app: mytv-api
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: nginx-ingress
ports:
- port: 3000
egress:
- to:
- podSelector:
matchLabels:
app: postgresql
ports:
- port: 5432
- to:
- podSelector:
matchLabels:
app: redis
ports:
- port: 6379

Tests de securite

Tests automatises

Type de testOutilFrequence
SASTCodeQLChaque PR
Dependancesnpm auditChaque build
SecretsgitleaksPre-commit
Licenceslicense-checkerChaque PR

Tests manuels

TestFrequencePerimetre
Test de penetrationAnnuelAPI complete
Revue de codeChaque PRCode modifie
Revue architectureTrimestrielDesign systeme

Reponse aux incidents

Classification des incidents de securite

SeveriteDescriptionTemps de reponse
CriticalData breach, RCE1 heure
HighAuth bypass, SQLi4 heures
MediumXSS, Info disclosure24 heures
LowVulnerabilites mineures72 heures

Processus de reponse aux incidents

  1. Detection -- Alerte du monitoring/rapport
  2. Triage -- Evaluer la severite et le perimetre
  3. Confinement -- Limiter les dommages
  4. Eradication -- Supprimer la menace
  5. Recuperation -- Restaurer les services
  6. Lessons Learned -- Post-mortem

Contacts d'urgence

RoleContactEscalation
Security Lead[email protected]Immediat
DevOps On-call[email protected]15 min
CTO[email protected]30 min
Legal[email protected]Si requis

Checklist de conformite

Avant deploiement

  • Tous les secrets dans le secret manager
  • TLS 1.3 configure
  • Security headers actives
  • Rate limiting actif
  • Validation des entrees complete
  • Gestion des erreurs aseptisee
  • Logging configure
  • Alertes de monitoring parametrees
  • HTTPS force
  • CORS correctement configure
  • Base de donnees acces restreint

Revue periodique

  • Hebdomadaire : Audit des dependances (npm audit)
  • Mensuel : Verification de rotation des secrets
  • Trimestriel : Revue des acces
  • Trimestriel : Formation securite
  • Semestriel : Exercice de reponse aux incidents
  • Annuel : Test de penetration
  • Annuel : Revue des politiques