Chaîne d'audit infalsifiable
Les événements de sécurité et de conformité sont écrits dans une table Postgres append-only chaînée par hash. Chaque ligne porte le sha256 de la précédente, les politiques RLS refusent UPDATE/DELETE au niveau base, et un cron de vérification quotidien détecte toute altération. C'est un scaffolding de preuve pour une revue SOC 2, HIPAA ou SEC qualifiée, pas une revendication de certification.
Preuvesrc/libs/AuditChain.ts + migration 0016-audit-chain
Conformité RGPD
Les utilisateurs peuvent demander un export complet de leurs données (JSON gzip de chaque ligne liée à leur compte, lien de téléchargement signé, TTL 24h) et programmer la suppression de leur compte avec une période de grâce de 30 jours. Le flux d'annulation utilise un jeton à usage unique envoyé par email. Les cascades FK nettoient toutes les tables produit lors de la suppression définitive.
Preuvesrc/actions/account.ts + table data_exports
Durcissement HTTP
Les routes en production embarquent Content-Security-Policy (default-src 'self', frame-ancestors 'none'), HSTS (max-age 2 ans, preload), X-Content-Type-Options nosniff, Referrer-Policy strict-origin-when-cross-origin, et une Permissions-Policy qui verrouille caméra, microphone et géolocalisation. Contact sécurité découvrable à /.well-known/security.txt (RFC 9116).
Preuvenext.config.ts headers() + /.well-known/security.txt
Webhooks idempotents
Tout endpoint mutant accepte un en-tête Idempotency-Key. Même clé + même corps rejoue la réponse mise en cache avec Idempotency-Replayed: true. Même clé + corps différent renvoie 409. Les webhooks Stripe sont indexés sur Stripe-Event-Id pour qu'aucun rejeu ne déclenche deux fois les lignes d'audit ou les notifications.
Preuvesrc/libs/Idempotency.ts + migration 0019-idempotency
Gestion des secrets
Chaque clé d'API, mot de passe de base de données et secret HMAC est chargé depuis l'environnement via un module Env strictement typé. Aucun secret n'est livré dans le bundle client — les modules server-only sont vérifiés statiquement. Le développement local utilise .env.local ; la production lit le coffre-fort de la plateforme.
Preuvesrc/libs/Env.ts (validé par zod, server-only)
Divulgation responsable
Nous publions un contact découvrable à /.well-known/security.txt avec notre email sécurité et l'URL de notre politique. Les chercheurs peuvent soumettre des découvertes en privé ; nous accusons réception sous 48h et visons un correctif ou une mitigation sous 7 jours pour les enjeux de gravité élevée.
Preuve/.well-known/security.txt