Welche Sicherheitsmechanismen hat Meteor? [geschlossen]

92

Wir alle wissen, dass Meteor den miniMongo-Treiber anbietet, mit dem der Client nahtlos auf die persistente Schicht (MongoDB) zugreifen kann.

Wenn ein Client auf die persistente API zugreifen kann, wie sichert er seine Anwendung?

Welche Sicherheitsmechanismen bietet Meteor und in welchem ​​Kontext sollten sie eingesetzt werden?

Olivier Refalo
quelle
6
Ich finde es toll, dass dies bereits angesprochen wird, aber sie hätten dies im Video wirklich erwähnen sollen. Ich denke, so ziemlich jeder Webentwickler, der es sich ansieht, wird diese Frage ab 10 Sekunden bis zum Ende im Kopf haben und sich nur darüber ärgern, dass er bei einem so großartigen Produkt das offensichtliche Sicherheitsproblem offenbar völlig ignoriert.
Naatan
6
Meteor 0.5.0 Benutzerauthentifizierung hinzugefügt meteor.com/blog/2012/10/17/…
hipertracker
Sie können dies ein wenig umformulieren, um es wieder zu öffnen. Vielleicht "Welche Sicherheitsmaßnahmen soll ich ergreifen?" oder "Welche Sicherheitsoptionen stehen zur Verfügung?"
Joeytwiddle
1
Meinungsbasiert? Wat? Ich dachte, dies war eine Wiedereröffnung, da sie offensichtlich nicht auf Meinungen basiert.
bjb568
Ich stimme zu, die meinungsbasierte Entscheidung ist nicht kontextbezogen - Antworten basieren auf wahren Fakten.
Olivier Refalo

Antworten:

64

Wenn Sie eine App mit dem Befehl meteor erstellen, enthält die App standardmäßig die folgenden Pakete:

  • AUTOPUBLISH
  • UNSICHER

Zusammen ahmen diese den Effekt nach, dass jeder Client vollen Lese- / Schreibzugriff auf die Datenbank des Servers hat. Dies sind nützliche Prototyping-Tools (nur für Entwicklungszwecke), die jedoch normalerweise nicht für Produktionsanwendungen geeignet sind. Wenn Sie für die Produktionsfreigabe bereit sind, entfernen Sie einfach diese Pakete.

Um weitere hinzuzufügen, unterstützt Meteor Facebook / Twitter / und viel mehr Pakete für die Authentifizierung. Das coolste ist das Accounts-UI- Paket

Murali Ramakrishnan
quelle
2
Richtig ab Meteor 0.5
Olivier Refalo
5
Standardmäßig unsicher. Huch.
Judah Gabriel Himango
16
@JudahHimango ist nur zu Testzwecken unsicher , und das Entfernen dieser beiden Pakete, wenn Sie für die Produktion bereit sind, ist so einfach wie meteor remove autopublish insecure.
BenjaminRH
1
Was ist mit Meteormethoden? Der Client kann auch bei unsicherer Deinstallation von der Konsole aus auf diese zugreifen, da sie auf dem Server ausgeführt werden. Wie kann man sie sicher machen?
Matanya
2
@Matanya, aber bei Verwendung und Ausführung von denen von der Konsole wird es einen access deniedFehler auslösen . Hör zu.
Ajduke
35

In den Sammlungen sagt doc :

Derzeit erhält der Client vollen Schreibzugriff auf die Sammlung. Sie können beliebige Mongo-Aktualisierungsbefehle ausführen. Sobald wir die Authentifizierung erstellt haben, können Sie den direkten Zugriff des Clients auf das Einfügen, Aktualisieren und Entfernen einschränken. Wir ziehen auch Validatoren und andere ORM-ähnliche Funktionen in Betracht.

pomber
quelle
1
Sehen
Sie
1
@ JonathanKingston Der Link ist defekt. Könnten Sie ihn bitte aktualisieren?
Carlos Barcelona
@CarlosBarcelona Die Domain ist abgelaufen und der Artikel war vor den Sicherheitsupdates in Meteor. Ich denke, es ist fair zu sagen, dass es veraltet war; Deshalb habe ich den Kommentar entfernt, um Zeit zu sparen. Vielen Dank
JonathanKingston
5

Wenn Sie darüber sprechen, den Client daran zu hindern, keine Ihrer nicht autorisierten API zum Einfügen / Aktualisieren / Löschen zu verwenden, ist dies möglich.

Siehe ihre todo App unter https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

Außerdem haben sie jetzt ein integriertes AUTH-Modul hinzugefügt, mit dem Sie sich anmelden und registrieren können. Also ist es sicher. Soweit Sie sich um XSS, Valiations, Client-Header usw. kümmern.

Sie können die Meteor-App jedoch jeden Tag in eine voll funktionsfähige NodeJS-Anwendung konvertieren, indem Sie sie auf dem Node bereitstellen. Wenn Sie also wissen, wie eine NodeJS-Anwendung gesichert wird, sollten Sie in der Lage sein, Meteor zu sichern.

Hitesh Joshi
quelle
1
Dies gilt ab September 2012
Olivier Refalo
2

Ab 0.6.4 gehen im Entwicklungsmodus die Blöcke is_client und is_server immer noch beide an das Client-System. Ich kann nicht sagen, ob diese beim Ausschalten des Entwicklungsmodus getrennt sind.

Wenn dies nicht der Fall ist, kann ein Hacker möglicherweise Einblicke in das System gewinnen, indem er die Blöcke des if-Codes (Meteor.is_server) überprüft. Das betrifft mich besonders, insbesondere, weil ich festgestellt habe, dass ich Sammlungen zu diesem Zeitpunkt noch nicht in separate Dateien auf Client und Server trennen kann.

Aktualisieren

Nun, der Punkt ist, dass Sie keinen sicherheitsrelevanten Code in einen is_server-Block in einem Nicht-Server-Verzeichnis einfügen (dh - stellen Sie sicher, dass er sich in etwas unter / server befindet.

Ich wollte sehen, ob ich nur verrückt danach war, Client- und Server-Sammlungen in den Client- und Server-Verzeichnissen nicht zu trennen. Tatsächlich gibt es damit kein Problem.

Hier ist mein Test. Es ist ein einfaches Beispiel für das Publish / Subscribe-Modell, das anscheinend gut funktioniert. http://goo.gl/E1c56

DrM
quelle
1
Die Lösung wäre, Ihren Code auf dem Server / Ordner zu speichern - auf diese Weise wird er nicht auf den Client übertragen.
Olivier Refalo
DrM, siehe docs.meteor.com/#structuringyourapp - sensibler Code muss nicht an den Kunden geliefert werden
Emgee
Probieren Sie etwas Einfaches aus. Erstellen Sie eine Sammlung in einer Serverdatei, erstellen Sie dann dieselbe Sammlung in der Client-Datei und teilen Sie mir mit, was passiert. Erstellen Sie als Nächstes eine Stammdatei mit der Deklaration der Sammlung, verweisen Sie dann einfach auf diese in einer Server- und Client-Verzeichnisdatei und teilen Sie mir mit, was passiert. Wenn Sie die Sammlung nicht wie ich erstellen können, wie können Sie diese unabhängig voneinander referenzieren? Am Ende muss der Verweis auf die Sammlung in derselben verfügbaren Client-Datei vorhanden sein und is_server und is_client verwenden. Ich hoffe, ich liege falsch, aber ich habe noch nicht herausgefunden, wie oder warum.
DrM
Hmm, seltsam, das Testen scheint in Ordnung zu sein, wird die Antwort aktualisieren
DrM
Der Link ist ein Repo zu einfachem Code, scheint aber gut zu funktionieren, nicht sicher, was die seltsamen Fehler in der Vergangenheit waren oder wie ich sie neu erstellen könnte.
DrM