Comment restreindre la modification des données Firebase?

93

Firebase fournit un back-end de base de données afin que les développeurs puissent se concentrer sur le code côté client.

Donc, si quelqu'un prend mon uri Firebase (par exemple, https://firebaseinstance.firebaseio.com), alors développez-le localement .

Seraient-ils alors en mesure de créer une autre application à partir de mon instance Firebase, de s'inscrire et de s'authentifier pour lire toutes les données de mon application Firebase?

rotinak
la source

Réponses:

104

@Frank van Puffelen,

Vous avez mentionné l'attaque de phishing. Il existe en fait un moyen de garantir cela.

Si vous vous connectez à votre console du gestionnaire d'API googleAPIs, vous avez la possibilité de verrouiller le référent HTTP dont votre application acceptera la demande.

  1. visitez https://console.developers.google.com/apis
  2. Accédez à votre projet Firebase
  3. Accéder aux identifiants
  4. Sous Clés API, sélectionnez la clé Navigateur associée à votre projet Firebase (doit avoir la même clé que la clé API que vous utilisez pour initialiser votre application Firebase.)
  5. Sous "Accepter les demandes de ces référents HTTP (sites Web), ajoutez simplement l'URL de votre application.

Cela ne devrait autoriser que le domaine en liste blanche à utiliser votre application.

Ceci est également décrit ici dans la checklist de lancement de Firebase ici: https://firebase.google.com/support/guides/launch-checklist

Peut-être que la documentation de Firebase pourrait rendre cela plus visible ou verrouiller automatiquement le domaine par défaut et obliger les utilisateurs à autoriser l'accès?

prufrofro
la source
2
lorsque je vais sur la console de l'API Google, je ne vois pas l'option de verrouiller le référent HTTP. Une capture d'écran sera utile. thx
rotanak
Avez-vous essayé de suivre les étapes ci-dessus? Cela devrait vous amener là. Pour des raisons de sécurité, je ne vais pas prendre de capture d'écran. N'oubliez pas de rechercher la clé du navigateur. bonne chance.
prufrofro
4
Qu'en est-il lors de l'utilisation de Firebase avec une application mobile hybride, en utilisant un framework comme ionic, comment la liste blanche peut-elle fonctionner? Aucune suggestion?
Dinana le
1
@prufrofro Est-ce que cela fonctionne bien pour vous? Je pensais faire la même chose pour une application Android. Je me demande pourquoi Firebase ne couvre pas cela dans la section sécurité.
steliosf
2
@Anand Oui, mais Firebase ne couvre pas cela dans la documentation. Par défaut, les clés sont publiques et vous devez les restreindre manuellement pour une utilisation uniquement dans un nom de package spécifique et un certificat d'application SHA-1. Et je me demandais pourquoi Firebase ne le mentionnait pas du tout. Y a-t-il un hic ou quelque chose?
steliosf
38

Le fait que quelqu'un connaisse votre URL n'est pas un risque pour la sécurité.

Par exemple: je n'ai aucun problème à vous dire que ma banque héberge son site Web à bankofamerica.com et qu'elle y parle le protocole HTTP. À moins que vous ne connaissiez également les informations d'identification que j'utilise pour accéder à ce site, connaître l'URL ne vous sert à rien.

Pour sécuriser vos données, votre base de données doit être protégée avec:

  • des règles de validation qui garantissent que toutes les données adhèrent à une structure que vous souhaitez
  • règles d'autorisation pour garantir que chaque bit de données ne peut être lu et modifié que par les utilisateurs autorisés

Tout cela est couvert dans la documentation Firebase sur la sécurité et les règles , que je recommande vivement.

Une fois ces règles de sécurité en place, la seule façon dont l'application de quelqu'un d'autre peut accéder aux données de votre base de données est de copier la fonctionnalité de votre application, de demander aux utilisateurs de se connecter à leur application au lieu de la vôtre et de se connecter / de lire / d'écrire sur votre base de données; essentiellement une attaque de phishing. Dans ce cas, il n'y a pas de problème de sécurité dans la base de données, bien qu'il soit probablement temps d'impliquer certaines autorités.

Frank van Puffelen
la source
4
pas tout à fait la réponse que je recherche. Laissez-moi vous poser une question différente. Supposons que je vous ai donné cette URL à ma base de feu https://tinderclone.firebaseio.com/et https://tinderclone.firebaseio.com/profiles.json. Ce sont de véritables bases de données Firebase. Pouvez-vous développer une application à partir de celle-ci, en créant un formulaire d'inscription et un formulaire de connexion avec e-mail. Étant donné que mon application permet à quiconque de s'inscrire par e-mail, une fois que vous vous êtes inscrit, seriez-vous en mesure de lire toutes les données? Je vous poserai une autre question plus tard. Merci
rattanak
4
Cela dépend de la manière dont vous sécurisez votre base de données. L'ajout simple ".read": falseempêchera quiconque de voir les données. Vous voudrez probablement autoriser un peu plus que cela, mais tout dépend de votre cas d'utilisation. La sécurisation des données est traitée dans la documentation Firebase sur la sécurité et les règles .
Frank van Puffelen
6

Concernant la liste blanche d'authentification pour les applications mobiles, où le nom de domaine n'est pas applicable, Firebase a

1) SHA1 fingerprintpour les applications Android et

2) App Store ID and Bundle ID and Team ID (if necessary)pour vos applications iOS

que vous devrez configurer dans la console Firebase.

Avec cette protection, puisque la validation n'est pas seulement si quelqu'un a une clé API valide, un domaine d'authentification, etc., mais aussi, elle provient de nos applications autorisées et domain name/HTTP referrer in casedu Web .

Cela dit, nous n'avons pas à nous inquiéter si ces clés API et autres paramètres de connexion sont exposés à d'autres.

Pour plus d'informations, https://firebase.google.com/support/guides/launch-checklist

Anand
la source
Pardonnez mon ignorance, je ne suis pas très doué pour le cryptage mais Sha1 n'est-il pas accessible via votre apk? Les gens ne peuvent-ils pas simplement copier le Sha1? Je ne vois pas comment cela aide. Je serais très heureux d'être prouvé autrement :)
cs guy
Oui. Vous pouvez certainement obtenir sha1 d'un apk. Mais ce n'est pas quelque chose que vous passez comme paramètre à Firebase pour valider votre appel. Il est pris par Firebase à son niveau api-sdk (croyez à partir du runtime Android). Vous ne pourrez donc pas envoyer cela à Firebase en tant que paramètre pour simuler la connexion.
Anand le
Utiliser uniquement l'empreinte digitale SHA1 n'aidera en rien à sécuriser la communication de votre application Android avec Firebase. Le SHA1 lui-même peut être obtenu et copié facilement, et la connexion peut toujours être falsifiée en utilisant l'API Firebase au lieu du SDK. Vous devez d'abord attester de votre application et utiliser un obscurcissement de code pour masquer la clé.
FEBRYAN ASA PERDANA