Règles de sécurité Firebase

Les règles de sécurité de Firebase Realtime Database vous permettent de sécuriser vos données contre les utilisateurs non autorisés et de protéger votre structure de données.

Dans ce tutoriel, j’expliquerai comment configurer correctement les règles de sécurité de votre base de données afin que seuls les utilisateurs autorisés aient un accès en lecture ou en écriture aux données. Je vais également vous montrer comment structurer vos données pour les sécuriser facilement.

Le problème

Supposons que nous ayons des données JSON dans notre base de données Firebase, comme dans l’exemple ci-dessous:

En regardant la base de données, vous pouvez voir qu’il y a des problèmes avec nos données:

  1. Deux utilisateurs (user1 et user3) ont les mêmes numéros de téléphone. Nous aimerions que ceux-ci soient uniques.
  2. user3 a un numéro pour le nom de famille, au lieu d’une chaîne.
  3. user2 a seulement sept chiffres dans leur numéro de téléphone, au lieu de 11.
  4. La valeur d’âge pour user1 et user2 est une chaîne, tandis que celle de user3 est un nombre.

Avec toutes ces failles mises en évidence dans nos données, nous avons perdu l’intégrité des données. Dans les étapes suivantes, je vais vous montrer comment éviter que cela ne se produise.

Règles permissives

La base de données en temps réel Firebase comporte les types de règles suivants:

Type Fonction
.read Décrit si et quand les données peuvent être lues par les utilisateurs.
.write Décrivez si et quand les données peuvent être écrites.
.validate Définit à quoi ressemblera une valeur correctement formatée, si elle a des attributs enfants et le type de données.
.indexOn Spécifie un enfant à indexer pour prendre en charge l’ordre et les requêtes.

En savoir plus sur eux dans le Documentation Firebase.

Voici une règle très permissive pour le users clé dans notre base de données.

C’est mauvais, car cela donne à n’importe qui la possibilité de lire ou d’écrire des données dans la base de données. Tout le monde peut accéder au chemin /users/ ainsi que des chemins plus profonds. Non seulement cela, mais aucune structure n’est imposée aux données des utilisateurs.

Règles de contrôle d’accès

Avec ces règles, nous contrôlons l’accès aux enregistrements des utilisateurs pour les utilisateurs connectés. Non seulement cela, mais les utilisateurs ne peuvent lire ou écrire que leurs propres données. Nous faisons cela avec un joker: $uid. Il s’agit d’une variable qui représente la clé enfant (les noms de variables commencent par $). Par exemple, accéder au chemin /users/user1, $uid est "user1".

Ensuite, nous utilisons le auth variable, qui représente l’utilisateur actuellement authentifié. Il s’agit d’une variable serveur prédéfinie fournie par Firebase. Aux lignes 5 et 6, nous appliquons une contrainte d’accessibilité selon laquelle seul l’utilisateur authentifié avec le même identifiant que l’enregistrement utilisateur peut lire ou écrire ses données. En d’autres termes, pour chaque utilisateur, l’accès en lecture et en écriture est accordé à /users/<uid>/, où <uid> représente l’ID utilisateur actuellement authentifié.

En relation :  Les meilleurs Chromebooks qui exécutent des applications Android

Les autres variables du serveur Firebase sont:

now L’heure actuelle en millisecondes depuis l’époque Linux.
root UNE RuleDataSnapshot représentant le chemin racine dans la base de données Firebase tel qu’il existait avant l’opération tentée.
newData UNE RuleDataSnapshot représentant les données telles qu’elles existeraient après la tentative d’opération. Il comprend les nouvelles données en cours d’écriture et les données existantes.
data Un RuleDataSnapshot représentant les données telles qu’elles existaient avant l’opération tentée.
auth Représente la charge utile du jeton d’un utilisateur authentifié.

En savoir plus sur ces variables de serveur et d’autres dans le Documentation Firebase.

Application de la structure des données

Nous pouvons également utiliser les règles Firebase pour appliquer des contraintes sur les données de notre base de données.

Par exemple, dans les règles suivantes, aux lignes 8 et 11, nous nous assurons que toute nouvelle valeur pour le prénom et le nom doit être une chaîne. À la ligne 14, nous nous assurons que l’âge est un nombre. Enfin, aux lignes 17 et 18, nous imposons que la valeur du numéro de téléphone soit une chaîne et de longueur 11.

Mais comment éviter les numéros de téléphone en double?

Prévention des doublons

Ensuite, je vais vous montrer comment éviter les numéros de téléphone en double.

Étape 1: normaliser la structure des données

La première chose à faire est de modifier le chemin racine pour inclure un /phoneNumbers/ nœud. Ainsi, lors de la création d’un nouvel utilisateur, nous ajouterons également le numéro de téléphone de l’utilisateur à ce nœud lorsque la validation sera réussie. Notre nouvelle structure de données ressemblera à ceci:

Étape 2: Appliquer la nouvelle structure de données

Nous devons modifier les règles de sécurité pour appliquer la structure des données:

Ici, nous nous assurons que le numéro de téléphone est unique en vérifiant s’il s’agit déjà d’un enfant du /phoneNumbers/ nœud avec le numéro de téléphone donné comme clé. En d’autres termes, nous vérifions que le numéro de téléphone n’a pas déjà été enregistré par un utilisateur. Si ce n’est pas le cas, la validation est réussie et l’opération d’écriture sera acceptée, sinon elle sera rejetée.

En relation :  Pourquoi les tablettes Android sucent (et quoi acheter à la place)

Votre application devra ajouter le numéro de téléphone à la liste des numéros de téléphone lors de la création d’un nouvel utilisateur, et elle devra supprimer le numéro de téléphone d’un utilisateur si cet utilisateur est supprimé.

Simulation des règles de validation et de sécurité

Vous pouvez simuler vos règles de sécurité dans la console Firebase en cliquant sur le bouton Simulateur bouton. Ajoutez vos règles de sécurité, sélectionnez le type de simulation (lecture ou écriture), saisissez des données avec un chemin et cliquez sur le bouton Courir bouton:

Simulateur Firebase

Si la valeur du prénom est un nombre au lieu d’une chaîne, la validation échouera et l’accès en écriture est refusé:

Accès en écriture refusé

Conclusion

Dans ce didacticiel, vous avez découvert les règles de sécurité de Firebase Database: comment empêcher tout accès non autorisé aux données et comment vous assurer que les données de la base de données sont structurées.

Pour en savoir plus sur les règles de sécurité de la base de données Firebase, reportez-vous au documentation officielle. Et découvrez quelques-uns de nos autres didacticiels et cours Firebase ici sur Envato Tuts +!

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.