Règles de sécurité DMV
Statut
Document de règles projet — v1.0 — relu le 2026-05-10.
Objectif
Règles de sécurité applicables à l'ensemble de l'écosystème DMV : backend, frontends, infrastructure, base de données et intégrations.
Règles strictes
- Ne jamais commettre de secret dans Git (API keys, tokens, mots de passe, JWT secrets).
- Ne jamais exposer
APP_KEY,SUPABASE_JWT_SECRET,RESEND_KEY,STRIPE_SECRET_KEYdans les logs, réponses ou code. - Ne jamais faire confiance au client pour les autorisations — vérifier côté serveur.
- Ne jamais désactiver HTTPS en production.
- Ne jamais exposer
APP_DEBUG=trueen production. - Ne jamais accepter de fichiers sans validation de type et de taille.
- Ne jamais stocker de données de carte bancaire — déléguer entièrement à Stripe.
- Ne jamais exposer des colonnes sensibles (ex:
stripe_customer_id,stripe_account_id) dans les réponses API non nécessaires.
Authentification et autorisation
- L'authentification repose sur Supabase Auth + Sanctum — ne pas court-circuiter ce flux.
- Les tokens Sanctum doivent avoir une expiration configurable.
- Les devices PlayLoop utilisent des tokens opaques révocables.
- Le header
X-App-Sourceest obligatoire sur les routes protégées. - La RLS PostgreSQL (Supabase) est la dernière ligne de défense côté données.
Données sensibles
| Donnée | Règle |
|---|---|
| Mots de passe | Ne jamais stocker — déléguer à Supabase Auth |
| Tokens Sanctum | $hidden sur le modèle, jamais dans les logs |
stripe_customer_id | $hidden, accès restreint |
stripe_account_id | $hidden, accès restreint |
| JWT Supabase | Ne jamais logger ni retransmettre |
| Données personnelles | Conformité RGPD, accès limité au nécessaire |
Infrastructure
- Cloudflare en frontal : protection DDoS, HTTPS forcé.
- Nginx : headers de sécurité (HSTS, X-Frame-Options, etc.).
- Certbot : certificats TLS automatiquement renouvelés.
- Secrets VPS : gérés dans
.envhors du dépôt. - Accès SSH : clé Ed25519, désactiver l'authentification par mot de passe.
API
- Rate limiting à implémenter sur les routes publiques et sensibles.
- Validation stricte de toutes les entrées (Form Requests Laravel).
- Pas d'endpoint de debug accessible en production.
- Webhooks Stripe : vérifier la signature avant tout traitement.
Principes directeurs
- Principe du moindre privilège : chaque composant n'a accès qu'à ce dont il a besoin.
- Défense en profondeur : plusieurs couches de contrôle (middleware, policy, RLS).
- Fail secure : en cas de doute, refuser l'accès.
- Auditabilité : les actions sensibles doivent être journalisées.
Anti-patterns à éviter
- Secrets en dur dans le code.
- Endpoints d'administration sans authentification forte.
- Upload de fichiers sans validation de type et antivirus.
- Confiance implicite entre modules internes (zero-trust interne).
- Désactivation de la validation CSRF sans raison (ici non applicable car API stateless).