Checklist Sécurité - Stripe & Authentification
Date de création : 11 novembre 2025
Statut : 🔵 En cours de rédaction
Propriétaire : Équipe Dev
Dernière mise à jour : 11 novembre 2025
📖 Guide d'Utilisation
Cette checklist est basée sur : - OWASP Top 10 (Standard de sécurité web) - Stripe Security (Documentation officielle Stripe) - Firebase Security (Documentation officielle Firebase) - PCI-DSS (Norme de sécurité des paiements)
Comment l'utiliser : 1. Lire chaque section 2. Comprendre le risque 3. Implémenter la solution 4. Cocher la case 5. Tester
1. OWASP Top 10 - Vulnérabilités Web Courantes
1.1 A01:2021 – Broken Access Control
Risque : Un utilisateur accède aux données d'un autre utilisateur
Solutions :
- [ ] Vérifier l'authentification sur chaque requête
- Chaque endpoint doit vérifier que l'utilisateur est connecté
-
Firebase Auth gère cela automatiquement ✅
-
[ ] Vérifier l'autorisation (user_id correspond)
- Chaque endpoint doit vérifier que l'utilisateur accède à SES données
- Exemple :
if (request.auth.uid != userId) { reject } -
Code : Vérifier dans Cloud Functions et Firestore Rules
-
[ ] Implémenter Firestore Security Rules strictes
✅ BON match /app_users/{userId} { allow read, write: if request.auth.uid == userId; } -
[ ] Tester les cas d'attaque
- [ ] User A essaie d'accéder à /users/456/profile (User B)
- [ ] User A essaie de modifier /users/456/subscription (User B)
- [ ] User A essaie de supprimer /users/456 (User B)
Ressources : - OWASP : https://owasp.org/Top10/A01_2021-Broken_Access_Control/ - Firebase Security Rules : https://firebase.google.com/docs/firestore/security/start
1.2 A02:2021 – Cryptographic Failures
Risque : Les données sensibles ne sont pas chiffrées
Solutions :
- [ ] Utiliser HTTPS partout
- Tous les appels API doivent être en HTTPS
-
Votre app utilise HTTPS ✅
-
[ ] Chiffrer les données sensibles au repos
-
Firestore chiffre automatiquement ✅
-
[ ] Ne jamais stocker les mots de passe en clair
-
Firebase Auth gère cela automatiquement ✅
-
[ ] Ne jamais stocker les numéros de carte
-
Stripe gère cela automatiquement ✅
-
[ ] Utiliser TLS 1.2+ pour les webhooks
- Stripe utilise TLS 1.2+ ✅
Ressources : - OWASP : https://owasp.org/Top10/A02_2021-Cryptographic_Failures/ - Stripe Security : https://stripe.com/docs/security
1.3 A03:2021 – Injection
Risque : Un attaquant injecte du code malveillant dans les requêtes
Solutions :
- [ ] Valider toutes les entrées utilisateur
- Email : Format valide (regex ou librairie)
- Montant : Nombre positif
-
UID : Format Firebase
-
[ ] Utiliser des requêtes paramétrées
- ✅ BON :
db.collection('users').where('email', '==', email) -
Firestore utilise les requêtes paramétrées ✅
-
[ ] Tester les cas d'injection
- [ ] Injecter
' OR '1'='1dans email - [ ] Injecter
<script>alert('xss')</script>dans nom
Ressources : - OWASP : https://owasp.org/Top10/A03_2021-Injection/
1.4 A04:2021 – Insecure Design
Risque : L'architecture n'est pas pensée pour la sécurité
Solutions :
- [ ] Implémenter rate limiting
- Limiter les tentatives de connexion (ex: 5 par 15 min)
-
Limiter les appels API (ex: 100 par heure)
-
[ ] Implémenter account lockout
- Après N tentatives échouées, bloquer le compte
-
Envoyer email d'alerte
-
[ ] Implémenter monitoring des anomalies
- Détecter les connexions depuis pays inconnus
-
Détecter les pics d'activité
-
[ ] Implémenter audit trails complets
- Logger toutes les actions sensibles
- Inclure : timestamp, user_id, action, résultat
Ressources : - OWASP : https://owasp.org/Top10/A04_2021-Insecure_Design/
1.5 A05:2021 – Security Misconfiguration
Risque : Les services ne sont pas correctement configurés
Solutions :
- [ ] Vérifier les Firestore Security Rules
- Pas de
allow read: if true;sauf pour données publiques -
Pas de
allow write: if true;jamais -
[ ] Vérifier les Cloud Functions
- Pas de secrets en dur (API keys, etc.)
-
Utiliser les variables d'environnement
-
[ ] Vérifier les permissions Firebase
-
Seuls les admins peuvent modifier les règles
-
[ ] Vérifier les headers de sécurité
- Content-Security-Policy
- X-Frame-Options
- X-Content-Type-Options
Ressources : - OWASP : https://owasp.org/Top10/A05_2021-Security_Misconfiguration/
1.6 A06:2021 – Vulnerable and Outdated Components
Risque : Utiliser des librairies avec des failles de sécurité
Solutions :
- [ ] Mettre à jour les dépendances régulièrement
- Flutter :
flutter pub upgrade - Node.js :
npm update -
Fréquence : Chaque mois minimum
-
[ ] Vérifier les dépendances vulnérables
- Flutter :
flutter pub outdated -
Node.js :
npm audit -
[ ] Utiliser des versions stables
- Pas de versions alpha/beta en production
-
Utiliser les versions LTS (Long Term Support)
-
[ ] Monitorer les annonces de sécurité
- S'abonner aux alertes Firebase
- S'abonner aux alertes Stripe
Ressources : - OWASP : https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/
1.7 A07:2021 – Identification and Authentication Failures
Risque : L'authentification n'est pas sécurisée
Solutions :
- [ ] Vérifier l'email avant d'accéder aux fonctionnalités
- Envoyer email de vérification
-
Bloquer les actions tant que email non vérifié
-
[ ] Implémenter password reset sécurisé
- Envoyer lien de réinitialisation par email
-
Lien valide 1 heure seulement
-
[ ] Implémenter 2FA (optionnel mais recommandé)
-
Authentification à deux facteurs (SMS, authenticator app)
-
[ ] Ne pas exposer les erreurs d'authentification
- ❌ MAUVAIS : "Email n'existe pas"
- ✅ BON : "Email ou mot de passe incorrect"
Ressources : - OWASP : https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/ - Firebase Auth : https://firebase.google.com/docs/auth/best-practices
1.8 A08:2021 – Software and Data Integrity Failures
Risque : Les données ou le code peuvent être modifiés sans détection
Solutions :
- [ ] Valider les webhooks Stripe
- Vérifier la signature HMAC-SHA256
-
Vérifier le timestamp
-
[ ] Valider les signatures des API calls
- Signer les requêtes importantes
-
Vérifier la signature côté serveur
-
[ ] Implémenter checksums pour les données critiques
- Montants de paiement
- Statuts d'abonnement
Ressources : - OWASP : https://owasp.org/Top10/A08_2021-Software_and_Data_Integrity_Failures/ - Stripe Webhooks : https://stripe.com/docs/webhooks/signatures
1.9 A09:2021 – Logging and Monitoring Failures
Risque : Pas de trace des événements → Impossible d'enquêter
Solutions :
- [ ] Logger tous les événements sensibles
- Connexions (succès + échecs)
- Changements de rôle
- Paiements (succès + échecs)
-
Suppressions de compte
-
[ ] Inclure les bonnes informations dans les logs
-
Timestamp, User ID, Action, Résultat
-
[ ] Protéger les logs
- Pas d'accès public
- Chiffrer les logs sensibles
-
Conserver 90 jours minimum
-
[ ] Monitorer les logs pour anomalies
- Alerter sur N connexions échouées
- Alerter sur paiements échoués
Ressources : - OWASP : https://owasp.org/Top10/A09_2021-Security_Logging_and_Monitoring_Failures/
1.10 A10:2021 – Server-Side Request Forgery (SSRF)
Risque : Le serveur fait des requêtes à des URL contrôlées par l'attaquant
Solutions :
- [ ] Valider toutes les URLs
- Vérifier que l'URL est dans une whitelist
-
Vérifier que l'URL n'est pas interne (localhost, 192.168.*, etc.)
-
[ ] Utiliser des timeouts
-
Limiter le temps des requêtes externes
-
[ ] Limiter les protocoles
- Autoriser seulement HTTPS
- Pas de file://, ftp://, etc.
Ressources : - OWASP : https://owasp.org/Top10/A10_2021-Server-Side_Request_Forgery_%28SSRF%29/
2. Stripe Security - Bonnes Pratiques Spécifiques
Source officielle : https://stripe.com/docs/security
2.1 Gestion des Clés API
- [ ] Utiliser des clés sécrètes, jamais publiques pour les opérations sensibles
- Clé publique : Utilisée côté client (checkout)
- Clé secrète : Utilisée côté serveur UNIQUEMENT
-
Stocker clé secrète dans variables d'environnement
-
[ ] Rotationner les clés régulièrement
- Créer nouvelle clé
- Mettre à jour le code
- Supprimer l'ancienne clé
-
Fréquence : Chaque 6 mois minimum
-
[ ] Utiliser des clés restreintes (Restricted API Keys)
- Limiter les permissions par clé
-
Exemple : Clé pour webhooks seulement
-
[ ] Monitorer l'utilisation des clés
- Vérifier les clés utilisées
- Vérifier les actions effectuées
Ressources : - Stripe API Keys : https://stripe.com/docs/keys
2.2 Webhooks Stripe
Risque : Quelqu'un peut prétendre être Stripe et envoyer de faux webhooks
Solutions :
-
[ ] Vérifier la signature HMAC-SHA256
const signature = req.headers['stripe-signature']; const event = stripe.webhooks.constructEvent( req.body, signature, process.env.STRIPE_WEBHOOK_SECRET ); -
[ ] Vérifier le timestamp du webhook
-
Rejeter les webhooks trop anciens (> 5 minutes)
-
[ ] Logger tous les webhooks
-
Inclure : timestamp, event_id, type, résultat
-
[ ] Gérer les erreurs de webhook
- Retourner 200 OK même en cas d'erreur
-
Retry automatique par Stripe
-
[ ] Tester les webhooks
- Utiliser Stripe CLI pour tester
- Tester tous les événements importants
Ressources : - Stripe Webhooks : https://stripe.com/docs/webhooks - Stripe Webhooks Security : https://stripe.com/docs/webhooks/signatures - Stripe CLI : https://stripe.com/docs/stripe-cli
2.3 Paiements Sécurisés
- [ ] Ne jamais stocker les numéros de carte
- Utiliser Stripe Checkout ou Payment Element
-
Vous recevez un token, pas la carte
-
[ ] Utiliser Stripe Checkout (recommandé)
- Gère la sécurité automatiquement
-
Gère la conformité PCI-DSS
-
[ ] Valider les montants côté serveur
- Ne pas faire confiance au montant du client
-
Recalculer le montant côté serveur
-
[ ] Utiliser Stripe Testing
- Numéros de carte de test fournis par Stripe
- Tester tous les scénarios (succès, échec, etc.)
Ressources : - Stripe Payments : https://stripe.com/docs/payments - Stripe Checkout : https://stripe.com/docs/payments/checkout - Stripe Testing : https://stripe.com/docs/testing
2.4 Abonnements Sécurisés
- [ ] Valider les changements d'abonnement
- Vérifier que l'utilisateur a le droit de modifier
-
Vérifier que le nouvel abonnement existe
-
[ ] Gérer les erreurs de paiement
- Retry automatique
- Notification utilisateur
-
Escalade en cas d'erreur persistante
-
[ ] Implémenter dunning (recouvrement)
- Relancer après paiement échoué
- Augmenter la fréquence des relances
-
Finalement annuler l'abonnement
-
[ ] Permettre l'annulation facile
- Bouton "Annuler l'abonnement" visible
- Pas de processus compliqué
Ressources : - Stripe Subscriptions : https://stripe.com/docs/billing/subscriptions/overview - Stripe Dunning : https://stripe.com/docs/billing/subscriptions/dunning
3. Firebase Security - Bonnes Pratiques Spécifiques
Source officielle : https://firebase.google.com/docs/firestore/security/start
3.1 Firestore Security Rules
Risque : Données accessibles à n'importe qui
Solutions :
-
[ ] Implémenter des règles strictes par défaut
✅ BON match /{document=**} { allow read, write: if false; } -
[ ] Vérifier l'authentification
✅ BON match /app_users/{userId} { allow read, write: if request.auth != null; } -
[ ] Vérifier l'autorisation (user_id correspond)
✅ BON match /app_users/{userId} { allow read, write: if request.auth.uid == userId; } -
[ ] Implémenter des rôles (admin, user, etc.)
function isAdmin() { return get(/databases/$(database)/documents/app_users/$(request.auth.uid)).data.role == "admin"; } -
[ ] Tester les règles
- Utiliser Firestore Emulator
- Tester tous les cas (authentifié, non authentifié, admin, user)
Ressources : - Firestore Security Rules : https://firebase.google.com/docs/firestore/security/start - Firestore Emulator : https://firebase.google.com/docs/emulator-suite
3.2 Firebase Authentication
- [ ] Activer l'authentification par email/mot de passe
-
Vérifier l'email avant d'accéder aux fonctionnalités
-
[ ] Activer les fournisseurs OAuth (Google, Apple)
-
Sécurisé et facile
-
[ ] Implémenter password reset
- Lien de réinitialisation par email
-
Lien valide 1 heure
-
[ ] Implémenter account deletion
- Permettre à l'utilisateur de supprimer son compte
- Supprimer toutes les données associées
Ressources : - Firebase Authentication : https://firebase.google.com/docs/auth - Firebase Authentication Best Practices : https://firebase.google.com/docs/auth/best-practices
3.3 Cloud Functions Security
- [ ] Valider toutes les entrées
- Email : Format valide
- Montant : Nombre positif
-
UID : Format Firebase
-
[ ] Utiliser des variables d'environnement pour les secrets
✅ BON const stripeKey = process.env.STRIPE_SECRET_KEY; -
[ ] Implémenter rate limiting
- Limiter les appels par utilisateur
-
Limiter les appels par IP
-
[ ] Implémenter timeouts
- Limiter le temps d'exécution des fonctions
Ressources : - Cloud Functions Security : https://firebase.google.com/docs/functions/security/overview
4. Résumé des Priorités
🔴 Critique (À faire avant tout)
- [ ] Firestore Security Rules strictes
- [ ] Validation des webhooks Stripe
- [ ] Authentification Firebase
- [ ] Audit trails complets
🟠 Haute Priorité (À faire avant production)
- [ ] Rate limiting
- [ ] Gestion des erreurs de paiement
- [ ] Droit à l'oubli (RGPD)
- [ ] Export de données (RGPD)
🟡 Moyenne Priorité (À faire avant expansion)
- [ ] 2FA
- [ ] Dunning (recouvrement)
- [ ] Monitoring des anomalies
- [ ] Audit externe de sécurité
5. Ressources Officielles
- OWASP Top 10 : https://owasp.org/www-project-top-ten/
- Stripe Security : https://stripe.com/docs/security
- Firebase Security : https://firebase.google.com/docs/firestore/security/start
- PCI-DSS : https://www.pcisecuritystandards.org/
Document créé par Cascade - Checklist de sécurité pour Yinshi