Liste de contrôle de sécurité Firebase

Pour assurer la sécurité de vos ressources Firebase et des données de vos utilisateurs, suivez ces instructions. Tous les éléments ne s'appliqueront pas nécessairement à vos besoins, mais gardez-les à l'esprit lorsque vous développez votre application.

Éviter le trafic abusif

Configurer la surveillance et les alertes pour les services backend

Pour détecter le trafic abusif, comme les attaques de déni de service (DOS), mis en place le suivi et l' alerte pour Nuage Firestore , Base de données en temps réel , Cloud Storage et d' hébergement

Si vous soupçonnez une attaque sur votre demande, atteindre au support le plus tôt possible pour leur faire savoir ce qui se passe.

Activer la vérification des applications

Pour veiller à ce que vos applications peuvent accéder à vos services back - end, activez App Vérifiez pour chaque service qui le prend en charge.

Configurez vos fonctions Cloud pour qu'elles s'adaptent au trafic normal

Cloud Functions évolue automatiquement pour répondre aux demandes de votre application, mais en cas d'attaque, cela peut représenter une grosse facture. Pour éviter cela, vous pouvez limiter le nombre d'instances simultanées d'une fonction en fonction du trafic normal pour votre application.

Configurer des alertes pour être averti lorsque les limites sont presque atteintes

Si votre service présente des pics de demandes, les quotas entrent souvent en vigueur et limitent automatiquement le trafic vers votre application. Assurez - vous de surveiller votre utilisation et tableau de bord de facturation , mais vous pouvez également définir des alertes budgétaires sur votre projet pour être informé lorsque l' utilisation des ressources dépasse les attentes.

Empêcher les auto-DOS : tester les fonctions en local avec les émulateurs

Il peut être facile de se DOS accidentellement lors du développement de Cloud Functions : par exemple, en créant une boucle d'écriture de déclenchement infinie. Vous pouvez éviter ces erreurs d'affecter les services en direct en faisant votre développement avec la suite émulateur Firebase .

(Et si vous le faites vous - même par mégarde DOS, undeploy votre fonction en le retirant de index.js en cours d' exécution puis firebase deploy --only functions .)

Là où la réactivité en temps réel est moins importante, la structure fonctionne de manière défensive

Si vous n'avez pas besoin de présenter le résultat d'une fonction en temps réel, vous pouvez atténuer le trafic abusif par le traitement des résultats par lots: publier les résultats à un Pub / Sub sujet et traiter les résultats à intervalles réguliers avec une fonction programmée .

Comprendre les clés API

Les clés API pour les services Firebase ne sont pas secrètes

Clés Firebase utilisations API uniquement pour identifier Firebase de votre application projet aux services Firebase, et de ne pas contrôler l' accès à la base de données ou des données Cloud Storage, qui se fait à l' aide Firebase règles de sécurité . Pour cette raison, vous n'avez pas besoin de traiter les clés API des services Firebase comme des secrets et vous pouvez les intégrer en toute sécurité dans le code client. En savoir plus sur les clés de l' API pour Firebase .

Configurer la portée de la clé API

Un moyen de dissuasion supplémentaire contre un attaquant d' essayer d'utiliser votre clé API pour les demandes charriez, vous pouvez créer des clés de l' API scope à vos clients d'applications .

Garder les clés du serveur FCM secrètes

Clés Contrairement à l' API pour les services Firebase, les clés du serveur FCM (utilisé par l' héritage FCM API HTTP ) sont sensibles et doivent être gardés secrets.

Garder les clés de compte de service secrètes

Aussi clés API pour les services à la différence, le service compte Firebase clés privées (utilisés par le Admin SDK ) sont sensibles et doivent être gardés secrets.

Règles de sécurité

Initialiser les règles en production ou en mode verrouillé

Lorsque vous configurez Cloud Firestore, Realtime Database et Cloud Storage, initialisez vos règles de sécurité pour refuser tout accès par défaut et ajoutez des règles qui accordent l'accès à des ressources spécifiques au fur et à mesure que vous développez votre application.

C'est l'un des paramètres par défaut pour les nouvelles instances de Cloud Firestore (mode de production) et Realtime Database (mode verrouillé). Choisissez cette option lors de la configuration d'une nouvelle instance de base de données.

Pour Cloud Storage, commencez par une configuration de règles de sécurité comme celle-ci :

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Les règles de sécurité sont un schéma ; ajouter des règles lorsque vous ajoutez des documents

N'écrivez pas de règles de sécurité après avoir écrit votre application, comme une sorte de tâche de pré-lancement. Au lieu de cela, écrivez des règles de sécurité au fur et à mesure que vous écrivez votre application, en les traitant comme un schéma de base de données : chaque fois que vous devez utiliser un nouveau type de document ou une nouvelle structure de chemin, écrivez d'abord sa règle de sécurité.

Règles de sécurité des tests unitaires avec Emulator Suite ; l'ajouter à CI

Pour vous assurer que vos règles de sécurité sont à suivre avec le développement de votre application, test unitaire vos règles avec la suite émulateur Firebase et ajouter ces tests à votre pipeline de CI. Voir ces guides pour Nuage Firestore et Base de données en temps réel .

Authentification

Authentification personnalisée : mint JWT à partir d'un environnement de confiance (côté serveur)

Si vous disposez déjà d'un système de connexion sécurisé, qu'il s'agisse d'un système personnalisé ou d'un service tiers, vous pouvez utiliser votre système existant pour vous authentifier auprès des services Firebase. Créer JWTs personnalisés à partir d' un environnement de confiance, puis passer les jetons à votre client, qui utilise le jeton pour authentifier ( iOS , Android , Web , Unity , C ++ ).

Pour un exemple d'utilisation de l' authentification personnalisée avec un fournisseur tiers, voir le billet de blog, authentifiez avec Firebase en utilisant Okta .

Authentification gérée : les fournisseurs OAuth 2.0 sont les plus sécurisés

Si vous utilisez les fonctionnalités d'authentification gérées de Firebase, les options du fournisseur OAuth 2.0 / OpenID Connect (Google, Facebook, etc.) sont les plus sécurisées. Vous devez prendre en charge un ou plusieurs de ces fournisseurs si vous le pouvez (en fonction de votre base d'utilisateurs).

Authentification par mot de passe par e-mail : définissez un quota strict pour le point de terminaison de connexion afin d'empêcher les attaques par force brute

Si vous utilisez le service d'authentification par mot de passe courrier électronique géré de Firebase, serrer le quota par défaut des identitytoolkit.googleapis.com points d' extrémité pour empêcher les attaques de force brute. Vous pouvez le faire depuis la page de l'API dans le Google Cloud Console .

Mettre à niveau vers Cloud Identity Platform pour une authentification multifacteur

Pour plus de sécurité sur la connexion, vous pouvez ajouter le support d'authentification multi-facteurs par la mise à niveau à Cloud Platform Identity . Votre code d'authentification Firebase existant continuera de fonctionner après la mise à niveau.

Authentification anonyme

Utilisez uniquement l'authentification anonyme pour l'intégration à chaud

Utilisez uniquement l'authentification anonyme pour enregistrer l'état de base des utilisateurs avant qu'ils ne se connectent réellement. L'authentification anonyme ne remplace pas la connexion des utilisateurs.

Convertissez les utilisateurs vers une autre méthode de connexion s'ils veulent les données lorsqu'ils perdent leur téléphone

Les données d'authentification anonymes ne persisteront pas si l'utilisateur efface le stockage local ou change d'appareil. Si vous avez besoin de persister au - delà des données redémarrages d'applications sur un seul appareil, convertir l'utilisateur à un compte permanent .

Utilisez des règles de sécurité qui exigent que les utilisateurs se soient convertis en un fournisseur de connexion ou aient vérifié leur e-mail

Tout le monde peut créer un compte anonyme dans votre projet. Dans cet esprit, protéger toutes les données non publiques avec les règles de sécurité qui nécessitent de connexion spécifiques méthodes ou adresses e - mail vérifiées .

Par exemple:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Gestion de l'environnement

Mettre en place des projets de développement et de mise en scène

Configurez des projets Firebase distincts pour le développement, la préparation et la production. Ne fusionnez pas le code client avec la production tant qu'il n'a pas été testé par rapport au projet intermédiaire.

Limiter l'accès de l'équipe aux données de production

Si vous travaillez avec une équipe plus grande, vous pouvez atténuer les conséquences des erreurs et des violations en limitant l' accès aux données de production en utilisant soit des rôles prédéfinis ou rôles IAM personnalisé.

Si votre équipe utilise la suite d'émulateurs pour le développement, vous n'aurez peut-être pas besoin d'accorder un accès plus large au projet de production.

Gestion de la bibliothèque

Méfiez-vous des fautes d'orthographe de la bibliothèque ou des nouveaux mainteneurs

Lorsque vous ajoutez des bibliothèques à votre projet, faites très attention au nom de la bibliothèque et de ses mainteneurs. Une bibliothèque du même nom que celle que vous avez l'intention d'installer peut contenir du code malveillant.

Ne mettez pas à jour les bibliothèques sans comprendre les changements

Consultez les journaux des modifications de toutes les bibliothèques que vous utilisez avant de procéder à la mise à niveau. Assurez-vous que la mise à niveau ajoute de la valeur et vérifiez que le mainteneur est toujours une partie en qui vous avez confiance.

Installer des bibliothèques de surveillance en tant que dépendances de développement ou de test

Utilisez une bibliothèque telle que Snyk pour analyser votre projet pour les dépendances non sécurisées.

Configurer la surveillance des fonctions ; vérifiez-le après les mises à jour de la bibliothèque

Si vous utilisez le SDK de l' enregistreur Fonctions nuage , vous pouvez surveiller et être alerté des comportements inhabituels, y compris le comportement causé par les mises à jour bibliothèque.

Sécurité de la fonction Cloud

Ne jamais mettre d'informations sensibles dans les variables d'environnement d'une fonction Cloud

Souvent, dans une application Node.js auto-hébergée, vous utilisez des variables d'environnement pour contenir des informations sensibles telles que des clés privées. Ne pas le faire dans les fonctions Cloud. Étant donné que Cloud Functions réutilise les environnements entre les appels de fonction, les informations sensibles ne doivent pas être stockées dans l'environnement.

  • Pour stocker les clés de l' API, qui sont Firebase pas un secret , il suffit de les intégrer dans le code.
  • Si vous utilisez le SDK Firebase Admin dans une fonction cloud, vous n'avez pas besoin de fournir explicitement les informations d'identification du compte de service, car le SDK peut les acquérir automatiquement lors de l'initialisation.
  • Si vous appelez API Google et Google Cloud qui nécessitent des informations d' identification de compte de service, la bibliothèque Google Auth pour Node.js peut obtenir ces informations d' identification des informations d' identification par défaut d'application , qui sont automatiquement dans les fonctions Cloud.
  • Pour les clés privées et des informations d' identification pour les services non Google disponibles à vos fonctions de Cloud, utilisez - Cloud secret directeur .

Crypter les informations sensibles

Si vous ne pouvez pas éviter de transmettre des informations sensibles à votre fonction Cloud, vous devez proposer votre propre solution personnalisée pour chiffrer les informations.

Les fonctions simples sont plus sûres ; si vous avez besoin de complexité, pensez à Cloud Run

Essayez de garder vos fonctions Cloud aussi simples et compréhensibles que possible. La complexité de vos fonctions peut souvent conduire à des bogues difficiles à repérer ou à un comportement inattendu.

Si vous avez besoin logiques complexes ou configurations environnement, envisagez d' utiliser Nuage Run au lieu des fonctions Cloud.