Quels sont les mécanismes de sécurité de Meteor? [fermé]

92

Nous savons tous que Meteor propose le pilote miniMongo qui permet de manière transparente au client d'accéder à la couche persistante (MongoDB).

Si un client peut accéder à l'API persistante, comment sécuriser son application?

Quels sont les mécanismes de sécurité fournis par Meteor et dans quel contexte doivent-ils être utilisés?

Olivier Refalo
la source
6
J'adore le fait que cela soit déjà abordé, mais ils auraient vraiment dû le mentionner dans la vidéo. Je pense que presque tous les développeurs Web qui le regardent auront cette question en tête dans les 10 secondes jusqu'à la fin, et se sentiront juste ennuyés que pour un produit aussi génial, ils semblent ignorer complètement le problème de sécurité évident.
Naatan
6
Meteor 0.5.0 a ajouté l'authentification de l'utilisateur meteor.com/blog/2012/10/17/…
hipertracker
Vous pouvez reformuler ceci un peu pour le faire rouvrir. Peut-être "Quelles mesures de sécurité dois-je prendre?" ou "Quelles options de sécurité sont disponibles?"
joeytwiddle
1
Basé sur une opinion? Wat? Je pense qu'il s'agissait d'un audit de réouverture car il n'est manifestement pas fondé sur une opinion.
bjb568
Je suis plutôt d'accord, la décision basée sur l'opinion est hors contexte - les réponses sont basées sur des faits vrais.
Olivier Refalo

Réponses:

64

Lorsque vous créez une application à l'aide de la commande meteor, l'application inclut par défaut les packages suivants:

  • PUBLICATION AUTOMATIQUE
  • PEU SÛR

Ensemble, ils imitent l'effet de chaque client ayant un accès complet en lecture / écriture à la base de données du serveur. Ce sont des outils de prototypage utiles (à des fins de développement uniquement), mais ne conviennent généralement pas aux applications de production. Lorsque vous êtes prêt pour la version de production, supprimez simplement ces packages.

Pour en ajouter davantage, Meteor prend en charge les packages Facebook / Twitter / et Much More pour gérer l'authentification, et le plus cool est le package Accounts-UI.

Murali Ramakrishnan
la source
2
Correct à partir du météore 0.5
Olivier Refalo
5
Non sécurisé par défaut. Yikes.
Judah Gabriel Himango
16
@JudahHimango n'est pas sécurisé à des fins de test uniquement , et supprimer ces deux packages lorsque vous êtes prêt pour la production est aussi simple que meteor remove autopublish insecure.
BenjaminRH
1
Qu'en est-il des méthodes météores? Le client peut accéder à ceux-ci à partir de la console même avec une désinstallation non sécurisée, car ils sont exécutés sur le serveur. Comment les sécuriser?
Matanya
2
@Matanya mais lors de l'utilisation et de l'exécution de ceux de la console, cela générera une access deniederreur. Vérifiez-le.
ajduke
35

Dans les collections, doc dit:

Actuellement, le client dispose d'un accès en écriture complet à la collection. Ils peuvent exécuter des commandes de mise à jour arbitraires de Mongo. Une fois l'authentification créée, vous pourrez limiter l'accès direct du client pour insérer, mettre à jour et supprimer. Nous envisageons également des validateurs et d'autres fonctionnalités de type ORM.

pomber
la source
1
Voir
dentarg
1
@jonathanKingston le lien est cassé, pourriez-vous le mettre à jour s'il vous plaît?
Carlos Barcelona
@CarlosBarcelona Le domaine a expiré et l'article était avant les mises à jour de sécurité dans Meteor. Je pense qu'il est juste de dire qu'il était dépassé; j'ai donc supprimé le commentaire pour gagner du temps. Merci
jonathanKingston
5

Si vous parlez de restreindre le client pour qu'il n'utilise aucune de vos API d'insertion / mise à jour / suppression non autorisées, c'est possible.

Consultez leur application todo sur https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

En outre, ils ont maintenant ajouté un module AUTH intégré, qui vous permet de vous connecter et de vous inscrire. Donc c'est sûr. Dans la mesure où vous vous occupez de XSS, des valiations, des en-têtes de clients, etc.

mais vous pouvez à tout moment convertir l'application meteor en une application nodejs entièrement fonctionnelle en la déployant sur node. Donc, si vous savez comment sécuriser une application nodejs, vous devriez pouvoir sécuriser meteor.

Hitesh Joshi
la source
1
C'est tout à fait vrai en septembre 2012
Olivier Refalo
2

Depuis la version 0.6.4, pendant le mode de développement, les blocs is_client et is_server vont toujours tous les deux vers le système client. Je ne peux pas dire si ceux-ci sont séparés lorsque vous désactivez le mode de développement.

Cependant, s'ils ne le sont pas, un hacker pourrait être en mesure d'obtenir des informations du système en examinant les blocs de code if (Meteor.is_server). Cela me préoccupe particulièrement, en particulier parce que j'ai noté que je ne peux toujours pas séparer les collections en fichiers séparés sur le client et le serveur.

Mettre à jour

Eh bien, le point est de ne pas mettre de code lié à la sécurité dans un bloc is_server dans un répertoire non-serveur (c'est-à-dire - assurez-vous qu'il se trouve dans quelque chose sous / server.

Je voulais voir si j'étais juste fou de ne pas pouvoir séparer les collections client et serveur dans les répertoires client et serveur. En fait, cela ne pose aucun problème.

Voici mon test. C'est un exemple simple du modèle de publication / abonnement qui semble fonctionner correctement. http://goo.gl/E1c56

DrM
la source
1
La solution serait d'enregistrer votre code dans le serveur / dossier - de cette façon, il n'est pas poussé vers le client.
Olivier Refalo
DrM, veuillez consulter docs.meteor.com/#structuringyourapp - le code sensible n'a pas besoin d'être livré au client
emgee
Essayez quelque chose de simple; créer une collection dans un fichier serveur, puis créer cette même collection dans le fichier client et me dire ce qui se passe. Ensuite, créez un fichier racine avec la déclaration de la collection, puis référencez-le simplement dans un fichier de répertoire serveur et client et dites-moi ce qui se passe. Si vous ne pouvez pas créer la collection, comme je ne le pourrais pas, comment pouvez-vous les référencer indépendamment? En fin de compte, vous avez besoin que la référence à la collection existe dans le même fichier client disponible et utilisez is_server et is_client. J'espère que je me trompe, mais je n'ai pas encore découvert comment ni pourquoi.
DrM
Hmm, étrange, les tests semblent aller bien, mettra à jour la réponse
DrM
Le lien est un repo vers du code simple, mais semble fonctionner correctement, je ne sais pas quelles étaient les erreurs étranges dans le passé ou comment je pourrais les recréer.
DrM