Sécurité du serveur Parse
Bonjour à tous, dans cet article je vais parler de la sécurité lors de l’utilisation de Parse Server sur Back4App. Comme la sécurité n’est pas un sujet qui rend les développeurs heureux, je vais être très concis et direct. Mon intention ici est de fournir une liste de contrôle de sécurité rapide pour examiner votre application avant d’en faire une application de production.
Contents
- 1 Mécanisme de sécurité de Parse
- 2 Liste de contrôle des applications de sécurité
- 2.1 1-Conserver la clé principale dans un coffre-fort
- 2.2 2-Contrôler la création de classes de clients
- 2.3 3-Créer une structure de rôles
- 2.4 4-Configurer CLP pour les utilisateurs et les rôles
- 2.5 5 – Rendre les classes fixes accessibles en lecture seule
- 2.6 6-Conseils généraux sur le CLP et l’ACL
- 2.7 7-Définissez la durée de votre session (dans certains cas)
- 2.8 8-Utiliser Https et SSL
- 3 Dernières paroles
Mécanisme de sécurité de Parse
Afin de configurer correctement l’accès à votre application, vous devez d’abord comprendre certains mécanismes de sécurité de base de Parse, les concepts des classes Parse par défaut et les mécanismes d’authentification.
1-Parse les classes par défaut
Parse crée par défaut 3 classes : Utilisateurs, Rôles et Sessions. Ces classes sont entièrement intégrées au backend et vous faciliteront la vie lors de la configuration des mécanismes d’authentification pour protéger votre application.
Utilisateur
Parse fournit une classe d’utilisateur spécialisée appelée Parse.User
qui gère automatiquement la plupart des fonctionnalités requises pour la gestion des comptes utilisateurs.
La classe Parse.User
est sécurisée par défaut. Les données stockées dans un Parse.User
ne peuvent être modifiées que par cet utilisateur. Par défaut, les données peuvent toujours être lues par n’importe quel client. Ainsi, certains objets Parse.User
sont authentifiés et peuvent être modifiés, tandis que d’autres sont en lecture seule.
Rôles
Le rôle est une classe dans laquelle vous pouvez associer des utilisateurs et d’autres rôles dans un nouveau rôle. Une fois que vous avez créé un rôle, vous pouvez l’utiliser pour définir ce à quoi ce rôle aura accès dans votre application à l’aide de CLP et d’ACL.
Session
Lorsque vous vous connectez à un utilisateur via une méthode de connexion Utilisateur
, Parse créera automatiquement un nouvel objet Session
sans restriction dans votre serveur Parse. Idem pour les inscriptions et les connexions Facebook/Twitter.
Mécanisme d’authentification 2-Parse
En ce qui concerne l’accès aux données sur Parse, vous pouvez contrôler la sécurité de votre application à deux niveaux différents :
- Classe/Table – Utilisez les CLP (Class Level Permissions) pour restreindre la création de nouvelles colonnes et l’accès général aux données à l’ensemble de la classe ;
- Objet – Utilisez les listes de contrôle d’accès (ACL) pour contrôler l’accès à un objet spécifique ;
Autorisations au niveau de la classe – CLP
Les autorisations au niveau de la classe sont un mécanisme qui contrôle l’accès à une classe et à tous ses objets. En utilisant les CLP, vous pouvez configurer l’accès en lecture/écriture à un rôle, à un utilisateur ou à un pointeur.
Ce mécanisme permet de restreindre l’accès aux opérations suivantes :
- Lire
- Get – Permet d’obtenir des informations sur les objets pour un ObjectId donné ;
- Find – Interroger tous les objets de cette classe (l’ObjectID n’est pas nécessaire) ;
- Count – Nombre total d’objets de la classe ;
- Écrire
- Create – Créer de nouveaux objets ;
- Update – Mettre à jour un objet existant ;
- Delete – Supprimer un objet existant ;
- Ajouter
- Ajouter un champ – Créer de nouvelles colonnes dans cette classe ;
Pour accéder à ces options de configuration, vous devez cliquer sur la petite icône du bouclier dans le menu rapide en haut à droite de la classe.
Après avoir cliqué sur l’icône du bouclier, vous verrez le menu simple avec les options de lecture/écriture disponibles. Cliquez sur l’icône en haut à droite de votre fenêtre pour accéder à la configuration avancée des CLP.
La fenêtre de configuration complète de CLP s’affiche alors.
Listes de contrôle d’accès – ACL
Les listes de contrôle d’accès vous permettent de contrôler différemment l’accès à chaque objet d’une classe donnée. Vous pouvez créer une ACL pour un objet et configurer l’accès (lecture/écriture) pour chaque rôle ou utilisateur.
Parse a toujours besoin d’un ACL pour créer un rôle. Ainsi, pour créer le premier rôle, vous aurez besoin d’un utilisateur. Créons un utilisateur root afin de créer les premiers rôles dans notre application. Cet utilisateur sera le seul à pouvoir modifier ces rôles.
Tout d’abord, nous pouvons créer l’utilisateur root en remplissant simplement le nom d’utilisateur et le mot de passe dans la table des utilisateurs.
Copiez ensuite l’ObjectId de l’utilisateur racine et allez dans la classe de rôle. Créez un nouveau rôle et double-cliquez sur le champ ACL afin de créer l’ACL. Dans ce cas, je vais permettre à l’utilisateur root de lire/écrire cette ACL, donc remplissons l’ACL avec l’ObjectID de l’utilisateur root et sauvegardons-le.
Après cette étape, donnons à ce rôle le nom d’Admin et associons les utilisateurs Alex et Alysson. Comme la classe de rôle a une relation avec la classe d’utilisateur, vous pouvez cliquer sur Vue d’ensemble de la relation et ajouter les ObjectIDs de l’utilisateur que vous souhaitez ajouter à cette relation.
Vous avez maintenant un Role Admin avec 2 utilisateurs que vous pouvez utiliser pour composer de nouveaux Rôles, pour attribuer de nouveaux ACL ou CLP.
Liste de contrôle des applications de sécurité
Maintenant que vous êtes familiarisé avec les principaux concepts de sécurité de Parse, j’aimerais vous suggérer quelques conseils pour rendre votre application plus sûre.
1-Conserver la clé principale dans un coffre-fort
La clé principale est le mécanisme de Parse qui permet de contourner toutes les autres couches de sécurité. Une bonne comparaison est que posséder la clé principale d’une application revient à avoir l’accès à la racine d’un serveur.
C’est pourquoi vous devez protéger cette clé et, le cas échéant, ne l’utiliser que dans le code du nuage. Vous devez éviter de l’utiliser dans votre code frontal car quelqu’un peut le décompiler ou, dans le cas de JS, simplement cliquer sur voir la source et copier votre clé.
Un autre conseil est que lorsque vous utilisez cette clé dans un code cloud, assurez-vous que vous n’allez pas livrer la clé (qui fait partie de votre code cloud) à un dépôt de code public.
2-Contrôler la création de classes de clients
Lorsque vous créez une nouvelle application sur Back4App, la Parse Key allowClientClassCreation est activée. Cela signifie que toute personne possédant l’AppID et la clé client peut créer de nouvelles classes dans votre base de données.
Vous pouvez changer cette configuration sur Back4App dans le menu Paramètres du serveur->Paramètres principaux->Paramètres.
Il suffit de faire défiler la page et de décocher l’option “Allow Client Class Creation” (autoriser la création de classes de clients), comme indiqué ci-dessous.
Il est recommandé de laisser cette option activée pendant que vous développez votre application et de la supprimer une fois que vous avez terminé.
3-Créer une structure de rôles
Comme nous l’avons commencé dans la section ACL, vous pouvez continuer et construire une structure de rôle pour mieux contrôler l’accès à toutes vos classes d’application et à tous vos objets. Imaginons que vous construisiez une application Uber-Clone et que vous ayez trois accès principaux : Admin, Passagers, Chauffeurs.
4-Configurer CLP pour les utilisateurs et les rôles
Comme User est une classe Parse par défaut, n’importe qui ayant le nom de la classe, la clé REST API et l’App ID peut demander toute votre liste d’utilisateurs en effectuant une seule commande curl :
curl -X GET -H "X-Parse-Application-Id : FyebII2zNpA2i9DdZ8froWna9vIvJMcgjfmjS0iK" -H "X-Parse-REST-API-Key : hluEgfZ084RdR0MyyE8Y9v4RwsOsTIWlJeC4qGw" https://parseapi.back4app.com/users
Et récupérer la liste des utilisateurs :
Vous pouvez éviter cela en créant un CLP et en limitant le pouvoir de ceux qui peuvent lire/écrire votre tableau des utilisateurs (il est également possible d’assurer une protection à l’aide d’ACL). Dans ce cas, je vais autoriser uniquement les utilisateurs Admin à lire la liste complète des utilisateurs.
Vous pouvez procéder de la même manière pour la classe de rôle et supprimer l’accès des rôles/utilisateurs qui n’ont pas besoin de lire l’intégralité de la classe.
La classe Session est protégée par défaut parce que tous les objets Session
ont une ACL créée automatiquement qui permet la lecture et l’écriture par cet utilisateur uniquement.
5 – Rendre les classes fixes accessibles en lecture seule
Si vous avez des tables/classes que vous ne voulez modifier que via Parse Dashboard, vous pouvez les rendre en lecture seule en utilisant le CLP. Dans mon cas, j’ai construit une classe qui définit la ville où mon application Uber-Clone va opérer.
Je veux modifier cette classe uniquement via le tableau de bord de Parse, je vais donc supprimer les droits d’accès en écriture de tous les autres rôles.
6-Conseils généraux sur le CLP et l’ACL
La plupart des classes de votre application appartiennent à l’une des deux catégories faciles à sécuriser. Pour les données entièrement publiques, vous pouvez utiliser des permissions au niveau de la classe pour verrouiller la table et la rendre publiquement lisible et inscriptible par personne. Pour les données entièrement privées, vous pouvez utiliser des ACL pour vous assurer que seul l’utilisateur qui possède les données peut les lire.
Mais il peut arriver que vous soyez confronté à des situations dans lesquelles vous ne souhaitez pas que les données soient entièrement publiques ou entièrement privées. Par exemple, dans le cas d’une application sociale, les données d’un utilisateur ne doivent pouvoir être lues que par les amis qu’il a approuvés. Dans ce cas, vous aurez besoin d’une combinaison des techniques présentées dans ce guide pour mettre en œuvre exactement les règles de partage que vous souhaitez.
Consultez cette vidéo sur la création d’une ACL pour plus de détails.
7-Définissez la durée de votre session (dans certains cas)
Si vous développez une application qui implique des informations très sensibles (application bancaire, application de soins de santé) et que vous avez besoin de déconnecter les utilisateurs après un court laps de temps.
Pour limiter la durée de la session, allez dans Paramètres du serveur->Paramètres de l’application personnalisée.
Dans la zone de texte Custom Parse Options, définissez la durée de la session en secondes. Dans le cas ci-dessous, je définis une session de 10 minutes. Cliquez ensuite sur Enregistrer.
8-Utiliser Https et SSL
Https est un protocole sécurisé pour le transfert d’informations du navigateur du client vers votre serveur. Il est nécessaire d’empêcher les pirates d’accéder à des informations sensibles par des attaques telles que MITM.
Le conseil ici est d’utiliser Https sur Http pour établir des connexions avec le serveur Parse. Vous trouverez ci-dessous un exemple utilisant une connexion JS avec Parse qui montre comment utiliser correctement https pour établir une connexion active. Notez que la mauvaise façon serait d’utiliser http:// au lieu de https://.
Parse.initialize("APP_ID", "JS_KEY") ; Parse.serverURL = 'https://parseapi.back4app.com/'
Si vous utilisez Back4App Webhosting, il est important de noter que Back4App fournit déjà une connexion https par défaut (vous devez utiliser https:// dans vos appels !).
Mais si vous voulez utiliser votre propre nom de domaine et rediriger vers les serveurs de Back4App, assurez-vous que votre certificat SSL est valide et correctement installé et que vous faites les redirections vers Back4App en utilisant https.
Dernières paroles
Back4App et Parse fournissent un certain nombre de moyens pour sécuriser les données dans le Cloud. Au fur et à mesure que vous construisez votre application et que vous évaluez les types de données que vous allez stocker, vous pouvez décider de l’implémentation à choisir.
Nous espérons que vous utiliserez ces outils pour faire tout ce qui est en votre pouvoir pour sécuriser les données de votre application et celles de vos utilisateurs. Ensemble, nous pouvons faire du web un endroit plus sûr.