Pour conserver vos ressources Firebase et l'expérience de vos utilisateurs des données, suivez ces consignes. Tous les articles ne s'appliqueront pas nécessairement à vos exigences, mais gardez à l'esprit lorsque vous développerez votre application.
Éviter le trafic abusif
Configurer la surveillance et les alertes pour les services de backend
Pour détecter le trafic abusif, comme les attaques par déni de service (DOS), configurez la surveillance et les alertes pour Cloud Firestore, Realtime Database, Cloud Storage et Hosting
Si vous suspectez une attaque sur votre application, contactez l'assistance dès que possible pour les informer de ce qui se passe.
Activer App Check
Pour vous assurer que seules vos applications peuvent accéder à vos services de backend, activez Firebase App Check pour chaque service compatible.
Configurer votre Cloud Functions pour s'adapter au trafic normal
Cloud Functions s'adapte automatiquement aux besoins de votre application, mais dans d'une attaque, cela peut signifier une grosse facture. Pour éviter cela, vous pouvez limiter le nombre d'instances simultanées d'une fonction en fonction du trafic normal de votre application.
Configurer des alertes pour être averti lorsque les limites sont presque atteintes
Si votre service présente des pics de requêtes, les quotas sont souvent appliqués de limiter le trafic vers votre application. Veillez à surveiller votre Tableau de bord Utilisation et facturation mais vous pouvez aussi définir des alertes budgétaires sur votre projet pour être averti lorsque l'utilisation des ressources dépasse les attentes.
Empêchez l'auto-dosage: testez les fonctions localement 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éclencheur infinie. Vous pouvez éviter que ces erreurs n'affectent les services en ligne en effectuant votre développement avec Firebase Local Emulator Suite.
Si vous exécutez accidentellement le service DOS vous-même, annulez le déploiement de votre fonction en la supprimant
à partir de index.js
, puis s'exécuter
firebase deploy --only functions
Lorsque la réactivité en temps réel est moins importante, structurez les données 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 pour limiter le trafic abusif en traitant les résultats par lots: publier les résultats à un Pub/Sub et traiter les résultats à intervalles réguliers fonction planifiée.
Comprendre les clés API
Les clés API pour les services Firebase ne sont pas secrètes
Firebase utilise des clés API uniquement pour identifier le projet Firebase de votre application auprès de Firebase et non de contrôler l'accès à la base de données ou aux données Cloud Storage, ce qui terminé d'utiliser Firebase Security Rules. Vous n'avez donc pas besoin de traiter les clés API des services Firebase comme des secrets, et les intégrer en toute sécurité dans le code client. En savoir plus sur les clés API pour Firebase
Configurer des restrictions de clés API
Pour dissuader un pirate informatique d'essayer d'utiliser votre clé API pour falsifier des requêtes, vous pouvez ajouter des restrictions de clé API pour limiter vos clés API aux clients de votre application et aux API que vous utilisez.
Garder FCM clés de serveur secrètes
Contrairement aux clés API pour les services Firebase, les clés de serveur FCM (utilisées par le ancienne API HTTP FCM) sont sensibles et doivent rester secrètes.
Garder les clés de compte de service secrètes
Contrairement aux clés API pour les services Firebase, les clés privées de compte de service (utilisées par le Firebase Admin SDK) sont sensibles et doivent rester secrets.
Firebase Security Rules
Initialiser des règles en mode production ou verrouillé
Lorsque vous configurez Cloud Firestore, Realtime Database et Cloud Storage, initialisez votre des règles de sécurité pour refuser tout accès par défaut et ajouter des règles permettant d'accorder l'accès des ressources spécifiques lorsque vous développez votre application.
Utilisez l'un des paramètres par défaut pour les nouvelles instances de Cloud Firestore (production mode) et Realtime Database (mode verrouillé). Pour Cloud Storage, commencez par une configuration de règles de sécurité semblable à 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. Ajoutez des règles lorsque vous ajoutez des documents
N'écrivez pas de règles de sécurité après avoir créé votre application, en guise de pré-lancement. tâche. Écrivez plutôt des règles de sécurité au fur et à mesure que vous écrivez votre application, en les traitant schéma de base de données: chaque fois que vous devez utiliser un nouveau type de document ou une nouvelle structure de chemin d'accès, sa règle de sécurité.
Tester les règles de sécurité avec Local Emulator Suite et les ajouter à la CI
Pour vous assurer que vos règles de sécurité suivent le développement de votre application, un test unitaire de vos règles Firebase Local Emulator Suite et ajouter ces tests à votre pipeline CI. Consultez ces guides pour Cloud Firestore et Realtime Database.
Authentification
Authentification personnalisée: générer des jetons JWT depuis un environnement approuvé (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 à un service tiers, vous pouvez utiliser votre système existant pour vous authentifier avec Services Firebase. Créez des jetons JWT personnalisés à partir d'un environnement sécurisé, puis transmettez-les à votre client, qui les utilise pour s'authentifier (iOS+, Android, Web, Unity, C++).
Pour obtenir un exemple d'utilisation de l'authentification personnalisée avec un fournisseur tiers, consultez l'article de blog, Authentifiez-vous avec Firebase à l'aide d'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, le protocole OAuth 2.0 / OpenID Les fournisseurs de connexion (Google, Facebook, etc.) sont les plus sécurisés. Toi doivent prendre en charge un ou plusieurs de ces fournisseurs, si possible (en fonction de votre de base).
Authentification par mot de passe de messagerie: 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 géré d'authentification par e-mail et mot de passe de Firebase, resserrez
quota par défaut des points de terminaison identitytoolkit.googleapis.com
pour empêcher les attaques
par la force des attaques. Pour ce faire, accédez à la section
Page API Identity Toolkit
dans la console Google Cloud.
Authentification par mot de passe par e-mail: activez la protection contre l'énumération d'adresses e-mail.
Si vous utilisez le service géré d'authentification par e-mail et mot de passe de Firebase, Activer la protection contre l'énumération d'adresses e-mail qui empêche les acteurs malveillants d'abuser des points de terminaison d'authentification de votre projet pour deviner les noms de compte.
Passer à Google Cloud Identity Platform pour l'authentification multifacteur
Pour plus de sécurité lors de la connexion, vous pouvez ajouter la prise en charge de l'authentification multifacteur en passant à Google Cloud Identity Platform. Votre code Firebase Authentication existant continuera de fonctionner après la mise à niveau.
Authentification anonyme
Utiliser l'authentification anonyme uniquement pour l'intégration à chaud
N'utilisez l'authentification anonyme que pour enregistrer l'état de base des utilisateurs avant qu'ils se connecter. L'authentification anonyme ne remplace pas pour vous connecter.
Convertir les utilisateurs vers une autre méthode de connexion s'ils souhaitent que leurs données soient disponibles sur d'autres appareils
Les données d'authentification anonyme ne persistent pas si l'utilisateur vide l'espace de stockage local ou change d'appareil. Si vous devez conserver des données au-delà du redémarrage de l'application un seul appareil, convertir l'utilisateur en compte permanent.
Utiliser des règles de sécurité exigeant que les utilisateurs se soient convertis en fournisseur de connexion ou aient validé leur adresse e-mail
N'importe qui peut créer un compte anonyme dans votre projet. Dans cette optique, protéger toutes les données non publiques avec des règles de sécurité qui nécessitent des méthodes de connexion spécifiques ou des adresses e-mail validées.
Exemple :
allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;
Sécurité : Cloud Functions
N'incluez jamais d'informations sensibles dans des variables d'environnement.
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. N'effectuez pas cette opération dans Cloud Functions. Comme Cloud Functions réutilise entre les appels de fonctions, les informations sensibles ne doivent pas être stockées dans l'environnement.
Pour stocker des clés API Firebase (qui ne sont pas secrètes), il suffit de les intégrer dans le code.
Si vous utilisez Firebase Admin SDK dans Cloud Functions, vous n'avez pas besoin de fournir explicitement les identifiants du compte de service, car Admin SDK peut les acquérir automatiquement lors de l'initialisation.
Si vous appelez des API Google et Google Cloud nécessitant un compte de service la bibliothèque Google Auth pour Node.js peut les obtenir à partir de identifiants par défaut de l'application, qui sont automatiquement renseignées dans Cloud Functions.
Pour mettre à la disposition de votre Cloud Functions les clés privées et les identifiants des services autres que Google, utilisez Secret Manager.
Chiffrer les informations sensibles
Si vous ne pouvez pas éviter de transmettre des informations sensibles à vos fonctions, vous devez trouver votre propre solution personnalisée pour chiffrer les informations.
Les fonctions simples sont plus sûres. si vous avez besoin de plus de complexité, envisagez d'utiliser Cloud Run
Essayez de garder vos fonctions aussi basiques et compréhensibles que possible. La complexité de vos fonctions peut souvent entraîner des bugs difficiles à détecter ou un comportement inattendu.
Si vous avez besoin de configurations d'environnement ou de logique complexes, envisagez d'utiliser Cloud Run au lieu de Cloud Functions
Gestion de l'environnement
Configurer des projets de développement et de préproduction
Configurez des projets Firebase distincts pour le développement, la préproduction et la production. Ne fusionnez pas le code client en production tant qu'il n'a pas été testé avec le projet de préproduction.
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 les violations en limitant l'accès aux données de production via rôles IAM prédéfinis ou rôles IAM personnalisés.
Si votre équipe utilise le Firebase Local Emulator Suite (recommandé) pour le développement, vous n'aurez peut-être pas besoin d'accorder un accès étendu projet de production.
Gestion de la bibliothèque
Faites attention aux fautes d'orthographe de votre bibliothèque ou aux nouveaux gestionnaires
Lorsque vous ajoutez des bibliothèques à votre projet, soyez particulièrement attentif au nom du bibliothèque et ses responsables. Une bibliothèque portant un nom semblable à celle que vous souhaitez pourrait contenir du code malveillant.
Ne pas mettre à jour les bibliothèques sans comprendre les modifications
Consultez les journaux des modifications de toutes les bibliothèques que vous utilisez avant d'effectuer la mise à niveau. Assurez-vous que la mise à niveau apporte de la valeur, et vérifiez que le responsable est toujours une partie de la confiance.
Installer des bibliothèques watchdog 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 pour Cloud Functions vérifier après les mises à jour de la bibliothèque
Si vous utilisez les SDK logger Cloud Functions, puis vous pouvez surveiller et être alerté des comportements inhabituels, y compris ceux causés par les mises à jour de la bibliothèque.