2016-04-15 9 views
1

Ich erstelle tatsächlich meine erste App mit Meteor, insbesondere mit eckigen 2. Ich habe Erfahrung mit Angular 1 und 2, also darauf basierend. Ich habe ein paar Punkte zur Sorge ...Meteor - Wie sicher ist es?

Lassen Sie uns dieses Szenario vorstellen ... Meine Daten auf MongoDB gespeichert:

Collection: Kunden

{ 
name : "Happy client", 
password : "Something non encrypted", 
fullCrediCardNumber : "0000 0000 0000 0000" 
} 

nun auf meinem Meteor Client-Ordner, ich habe diese struncture ...

Sammlung clients.ts (Serverordner)

export var Clients = new Mongo.Collection('clients'); 

co mponent client.ts (nicht-Server-Ordner)

import {Clients} from '../collections/clients.ts'; 

class MyClients { 
clients: Array<Object>; 
constructor(zone: NgZone) { 
    this.clients = Clients.find(); 
    } 
} 

..und zum Schluss: die HTML-Seite, es zu machen, sondern zeigt nur den Namen der Kunden:

<li *ngFor="#item of clients"> 
    {{client.name}} 
</li> 

bisher Ok. aber meine Sorge ist: In Winkel 1 & 2 Anwendungen die Komponente oder Controller oder Richtlinie läuft auf der Client-Seite, nicht Server-Seite.

Ich setze mein HTML nur um den Namen des Clients anzuzeigen. aber da es ein HTML-Rendering ist, ist es wahrscheinlich mit etwas Geschick ziemlich einfach, etwas Code in den HTML-Render auf eckigen Code zu injizieren, um alle meine Felder anzuzeigen.

Oder könnte einfach zu der Konsole gehen und einige Befehle eingeben, um das gesamte Objekt aus der Datenbanksammlung anzuzeigen.

Meine Frage ist also: Wie sicher ist Meteor in diesem Sinne? Stimmen meine Bedenken? Kann Meteor meine Daten schützen, den Namen der Sammlungen schützen? Ich weiß, dass ich auf der find() angeben kann, um mir diese sensiblen Daten nicht zu bringen, aber da find() nicht auf der Server-Seite laufen könnte, könnte es leicht sein, es im laufenden Betrieb zu modifizieren, nein?

Wie auch immer ... Ich werde Erklärungen dafür schätzen, wie Meteor in diesem Sinne sicher (oder nicht) ist.

ty!

+1

Dies ist ein großes Thema. Ich würde empfehlen, den Abschnitt [security] (http://guide.meteor.com/security.html) des Handbuchs zu lesen. –

+2

Im Allgemeinen (sehr allgemein) sollten Sie keine Daten senden, auf die sie keinen Zugriff haben. Wenn sie bösartig sind, sehen sie nur Daten, die sie sehen dürfen. Ihr Client ist noch nie sicher, also trauen Sie ihm nicht, keine Daten verfügbar zu machen, Validierungen durchzuführen usw. – ste2425

+0

Ja, aber bedenken Sie: Sie haben eine client.find() auf der Client-Seite laufen ... Ich kann setzen etwas wie client.find (nur die Felder, die ich wünsche) ... das ist ok ... aber da der Befehl find() auf der Clientseite ausgeführt wird, sieht es für jeden einfach aus, etwas wie client.find (alles, einschließlich sensitive) auszuführen data) - Es ist sehr einfach, direkte find() MongoDB-Befehle von der Clientseite aus auszuführen. Ich versuche herauszufinden, ob meine Theorie richtig ist oder nicht. –

Antwort

2

Sie können Daten schützen, indem Sie einfach keine sensiblen Daten auf der Serverseite veröffentlichen.

Meteor.publish("my-clients", function() { 
    return Clients.find({ 
    contractorId: this.userId // Publish only the current user's clients 
    }, { 
    name: 1, // Publish only the fields you want the browser to know of 
    phoneNumber: 1 
    }); 
}); 

Dieses Beispiel nur veröffentlicht die name und address Felder des aktuell in Benutzer-Clients angemeldet, aber nicht ihre password oder fullCreditCardNumber.

Ein anderes gutes Beispiel ist die Meteor.users Sammlung. Auf dem Server enthält es alle Benutzerdaten, Anmeldedaten, Profile usw. für alle Benutzer. Aber es ist auch auf der Clientseite zugänglich. Meteor hat zwei wichtige Dinge diese sehr empfindlich Sammlung zu schützen:

  • standardmäßig veröffentlicht es nur ein Dokument. Den Benutzer, der angemeldet ist, wenn Sie Meteor.users.find().fetch() in die Browser-Konsole eingeben, werden Sie sehen nur die aktuell angemeldete in Daten des Benutzers, und es gibt keine Möglichkeit auf der Client-Seite, die gesamte MongoDB users Sammlung zu erhalten.Der richtige Weg, dies zu tun, ist die Menge der veröffentlichten Dokumente in Ihrer Meteor.publish Funktion zu beschränken. Siehe mein Beispiel oben oder 10.9 in der Meteor publish and subscribe tutorial.

  • Nicht das gesamte Benutzerdokument wird veröffentlicht. Zum Beispiel OAuth-Anmeldedaten und Passwort-Hashes sind nicht, Sie finden sie nicht in der clientseitigen Sammlung. Sie können immer wählen, welcher Teil eines Dokuments veröffentlicht wird. Eine einfache Möglichkeit dazu besteht darin, wie im obigen Beispiel MongoDB projections zu verwenden.

+0

Hallo @aedm! ty !! Ich habe viele Artikel über die Benutzersammlung gelesen. Kann ich dasselbe auch mit anderen Sammlungen tun oder nur für die Sammlung von Benutzern? –

+0

Ja, Sie können die gleichen Techniken auf alle Ihre Sammlungen anwenden und sie genauso gut schützen. – aedm

Verwandte Themen