Skip to content

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'='1 dans 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