Parse Server Sicherheit

Hallo zusammen, in diesem Artikel werde ich über die Sicherheit bei der Verwendung von Parse Server auf Back4App sprechen. Da Sicherheit kein Thema ist, das Entwickler glücklich macht, werde ich mich sehr kurz und direkt fassen. Meine Absicht war es, eine schnelle Sicherheits-Checkliste zur Verfügung zu stellen, um Ihre App zu überprüfen, bevor Sie sie in Produktion geben.

Parse-Sicherheitsmechanismus

Um einen angemessenen Sicherheitszugang zu Ihrer App zu konfigurieren, sollten Sie zunächst einige grundlegende Sicherheitsmechanismen von Parse verstehen, nämlich die Konzepte der Standard-Parse-Klassen und die Auth-Mechanismen.

1-Parse Standard-Klassen

Parse erstellt standardmäßig 3 Klassen: Benutzer, Rollen und Sitzungen. Diese Klassen sind vollständig in das gesamte Backend integriert und machen Ihnen das Leben leichter, wenn Sie die Authentifizierungsmechanismen zum Schutz Ihrer App konfigurieren.

Benutzer

Parse bietet eine spezielle Benutzerklasse namens Parse.User, die einen Großteil der für die Verwaltung von Benutzerkonten erforderlichen Funktionen automatisch übernimmt.

Die Klasse Parse.User ist standardmäßig gesichert. Daten, die in einem Parse.User gespeichert sind, können nur von diesem Benutzer geändert werden. Standardmäßig können die Daten jedoch von jedem Client gelesen werden. Daher sind einige Parse.User-Objekte authentifiziert und können geändert werden, während andere schreibgeschützt sind.

Rollen

Eine Rolle ist eine Klasse, mit der Sie Benutzer und andere Rollen zu einer neuen Rolle zusammenfassen können. Sobald Sie eine Rolle erstellt haben, können Sie damit definieren, worauf diese Rolle in Ihrer App mit CLPs und ACLs zugreifen kann.

Sitzung

Wenn Sie einen Benutzer über eine Benutzer-Login-Methode anmelden, erstellt Parse automatisch ein neues, uneingeschränktes Session-Objekt in Ihrem Parse-Server. Dasselbe gilt für Anmeldungen und Facebook/Twitter-Anmeldungen.

2-Parse Auth Mechanismus

Wenn es um den Datenzugriff bei Parse geht, können Sie die Sicherheit Ihrer App auf 2 verschiedenen Ebenen kontrollieren:

  1. Klasse/Tabelle – Verwenden Sie CLPs (Class Level Permissions), um die Erstellung neuer Spalten und den allgemeinen Datenzugriff auf die gesamte Klasse zu beschränken;
  2. Objekt – Verwenden Sie ACL (Access Control Lists), um den Zugriff auf ein bestimmtes Objekt zu kontrollieren;

Berechtigungen auf Klassenebene – CLPs

Berechtigungen auf Klassenebene sind ein Mechanismus, der den Zugriff auf eine Klasse und alle ihre Objekte kontrolliert. Mit CLPs können Sie den Lese-/Schreibzugriff auf eine Rolle, einen Benutzer oder einen Zeiger konfigurieren.

Mit diesem Mechanismus können Sie den Zugriff auf die folgenden Vorgänge einschränken:

  • Lesen
    • Get – Abrufen von Objektinformationen für eine bestimmte ObjectId;
    • Find – Abfrage aller Objekte in dieser Klasse (ObjectID ist nicht erforderlich);
    • Count – Gesamtzahl der Objekte der Klasse;
  • Schreiben
    • Erstellen – Neue Objekte erstellen;
    • Aktualisieren – Vorhandenes Objekt aktualisieren;
    • Löschen – Vorhandenes Objekt löschen;
  • Hinzufügen
    • Feld hinzufügen – Erstellen Sie neue Spalten in dieser Klasse;

Um auf diese Konfigurationsoptionen zuzugreifen, sollten Sie auf das kleine Schildsymbol im Schnellmenü oben rechts gehen.

Nachdem Sie auf das Schildsymbol geklickt haben, sehen Sie ein einfaches Menü, in dem nur Lese- und Schreiboptionen verfügbar sind. Klicken Sie auf das Symbol oben rechts in Ihrem Fenster, um die erweiterte CLP-Konfiguration aufzurufen.

Daraufhin wird das vollständige CLP-Konfigurationsfenster angezeigt.

Zugriffskontrolllisten – ACLs

Mit Zugriffskontrolllisten können Sie den Zugriff auf jedes Objekt einer bestimmten Klasse unterschiedlich steuern. Sie können eine ACL für ein Objekt erstellen und den Zugriff (Lesen/Schreiben) für jede Rolle oder jeden Benutzer konfigurieren.

Parse benötigt immer eine ACL, um eine Rolle zu erstellen. Um die erste Rolle zu erstellen, benötigen Sie also einen Benutzer. Lassen Sie uns einen Root-Benutzer anlegen, um die ersten Rollen in unserer App zu erstellen. Dieser Benutzer wird der einzige Benutzer sein, der diese Rollen bearbeiten kann.

Zunächst können wir den Root-Benutzer erstellen, indem wir einfach einen Benutzernamen und ein Passwort in die Benutzertabelle eintragen.

Dann kopieren Sie die Root User ObjectId und gehen zur Role Class. Erstellen Sie eine neue Rolle und doppelklicken Sie auf das Feld ACL, um die ACL zu erstellen. In diesem Fall werde ich dem Root-Benutzer erlauben, diese ACL zu lesen/schreiben, also füllen wir die ACL mit der ObjectID des Root-Benutzers und speichern sie dann.

Nach diesem Schritt geben wir dieser Rolle den Namen Admin und ordnen die Benutzer Alex und Alysson zu. Da die Rollenklasse eine Beziehung mit der Benutzerklasse hat, können Sie auf “Übersicht Beziehung” klicken und dann die ObjectIDs des Benutzers hinzufügen, den Sie dieser Beziehung hinzufügen möchten.

Klicken Sie auf Relation anzeigen
Füllen Sie die Liste der Benutzer Objekt IDs durch Komma getrennt
Prüfen Sie das Endergebnis

Jetzt haben Sie einen Rollenadministrator mit 2 Benutzern, mit denen Sie neue Rollen zusammenstellen und neue ACLs oder CLPs zuweisen können.

Checkliste für Sicherheitsanwendungen

Da Sie nun mit den wichtigsten Parse-Sicherheitskonzepten vertraut sind, möchte ich Ihnen einige Ratschläge geben, um Ihre App sicherer zu machen.

1-Hauptschlüssel sicher aufbewahren

Der Master Key ist der Parse-Mechanismus zur Umgehung aller anderen Sicherheitsebenen. Ein guter Vergleich ist, den App Master Key für eine App zu haben, ist wie der Root-Zugang eines Servers.

Aus diesem Grund müssen Sie diesen Schlüssel schützen und bei Bedarf nur über Cloud-Code verwenden. Sie sollten es vermeiden, ihn in Ihrem Front-End-Code zu verwenden, denn jemand kann ihn dekompilieren oder, im Fall von JS, einfach auf “View Source” klicken und Ihren Schlüssel kopieren.

Ein weiterer Ratschlag ist, bei der Verwendung dieses Schlüssels in einem Cloud-Code sicherzustellen, dass Sie den Schlüssel (der Teil Ihres Cloud-Codes ist) nicht an ein öffentliches Code-Repository übergeben.

2-Uncheck Client-Klassenerstellung

Wenn Sie eine neue App auf Back4App erstellen, wird der Parse Key allowClientClassCreation aktiviert. Das bedeutet, dass jeder mit der AppID und dem Client Key neue Klassen in Ihrer Datenbank erstellen kann.

Sie können diese Konfiguration in Back4App unter dem Menüpunkt Servereinstellungen->Kerneinstellungen->Einstellungen ändern.

Blättern Sie einfach nach unten und deaktivieren Sie die Option “Erstellung von Client-Klassen zulassen”, wie unten gezeigt.

Es wird empfohlen, diese Option während der Entwicklung Ihrer Anwendung aktiviert zu lassen und sie nach Abschluss der Entwicklung zu entfernen.

3-Schaffen Sie eine Rollenstruktur

Wie wir im Abschnitt ACL begonnen haben, können Sie nun eine Rollenstruktur aufbauen, um den Zugriff auf alle Ihre App-Klassen und Objekte besser zu kontrollieren. Nehmen wir an, Sie bauen eine Uber-Clone-App und Sie haben 3 Hauptzugänge: Admin, Fahrgäste, Fahrer.

4-Konfigurieren Sie das CLP für Benutzer und Rollen

Da User eine Standard-Parse-Klasse ist, kann jeder, der den Klassennamen, den REST-API-Schlüssel und die App-ID hat, mit einem einzigen curl-Befehl die gesamte Benutzerliste abfragen:

curl -X GET -H "X-Parse-Application-Id: FyebII2zNpA2i9DdZ8froWna9vIvJMcgjfmjS0iK" -H "X-Parse-REST-API-Key: hluEgfZ084RdR0MyyE8Y9v4RwsOsTIWlJeCc4qGw" https://parseapi.back4app.com/users

Und rufen Sie die Benutzerliste ab:

Sie können dies vermeiden, indem Sie ein CLP erstellen und die Befugnis derjenigen, die Ihre Benutzertabelle lesen/schreiben können, einschränken (es ist auch möglich, einen Schutz mit ACLs zu erstellen). In diesem Fall erlaube ich nur Admin-Benutzern, die komplette Benutzerliste zu lesen.

Sie können einen ähnlichen Prozess wie bei der Rollenklasse durchführen und den Zugriff von Rollen/Benutzern entfernen, die die gesamte Klasse nicht lesen müssen.

Die Session-Klasse ist standardmäßig geschützt, da alle Session-Objekte eine automatisch erstellte ACL haben, die nur von diesem Benutzer gelesen und geschrieben werden kann.

5 – Feste Klassen schreibgeschützt machen

Wenn Sie Tabellen/Klassen haben, die Sie nur über Parse Dashboard ändern möchten, können Sie sie mit dem CLP schreibgeschützt machen. In meinem Fall habe ich eine Klasse erstellt, die die Stadt definiert, in der meine Uber-Clone-App betrieben werden soll.

Ich möchte diese Klasse nur über Parse Dashboard ändern, also entziehe ich allen anderen Rollen die Schreibrechte.

6 Allgemeine CLP- und ACL-Hinweise

Die meisten Klassen in Ihrer Anwendung fallen in eine der beiden leicht zu sichernden Kategorien. Für vollständig öffentliche Daten können Sie Berechtigungen auf Klassenebene verwenden, um die Tabelle so zu sperren, dass sie von niemandem gelesen oder geschrieben werden kann. Bei vollständig privaten Daten können Sie mithilfe von ACLs sicherstellen, dass nur der Benutzer, der Eigentümer der Daten ist, diese lesen kann.

Gelegentlich werden Sie jedoch in Situationen geraten, in denen Sie nicht wollen, dass die Daten vollständig öffentlich oder vollständig privat sind. Zum Beispiel können Sie eine soziale App haben, in der Sie Daten für einen Benutzer haben, die nur für Freunde lesbar sein sollen, die sie genehmigt haben. In diesem Fall benötigen Sie eine Kombination der in diesem Leitfaden besprochenen Techniken, um genau die von Ihnen gewünschten Freigaberegeln zu aktivieren.

In diesem Video über die Erstellung von ACL finden Sie weitere Einzelheiten.

7-Einstellen der Dauer der Sitzung (nur einige Fälle)

Wenn Sie eine App entwickeln, die sehr sensible Informationen enthält (Banking App, Health Care App) und Sie die Benutzer nach einer kurzen Zeit abmelden müssen.

Um die Sitzungslänge zu begrenzen, gehen Sie zu Servereinstellungen->Benutzerdefinierte App-Einstellungen.

Im Textfeld Benutzerdefinierte Parse legen Sie die Sitzungsdauer in Sekunden fest. Im folgenden Fall habe ich eine Sitzungsdauer von 10 Minuten festgelegt. Klicken Sie dann auf Speichern.

8-Verwendung von Https und SSL

Https ist ein sicheres Protokoll für die Übertragung von Informationen vom Browser des Kunden zu Ihrem Server. Es ist notwendig, um zu verhindern, dass Hacker mit Angriffen wie MITM auf sensible Informationen zugreifen können.

Hier wird empfohlen, Https über Http zu verwenden, um Verbindungen mit Parse Server herzustellen. Nachfolgend finden Sie ein Beispiel für eine JS-Verbindung mit Parse, das zeigt, wie Sie https korrekt verwenden, um eine aktive Verbindung herzustellen. Beachten Sie, dass der falsche Weg die Verwendung von http:// anstelle von https:// wäre.

Parse.initialize("APP_ID", "JS_KEY");
Parse.serverURL = 'https://parseapi.back4app.com/'

Wenn Sie Back4App Webhosting verwenden, ist es wichtig zu beachten, dass Back4App bereits standardmäßig eine https-Verbindung bereitstellt (Sie müssen https:// in Ihren Aufrufen verwenden!).

Wenn Sie jedoch Ihren eigenen Domainnamen verwenden und auf die Back4App-Server umleiten möchten, stellen Sie sicher, dass Ihr SSL-Zertifikat gültig und ordnungsgemäß installiert ist und dass Sie die Umleitungen zu Back4App über https vornehmen.

Letzte Worte

Back4App und Parse bieten Ihnen eine Reihe von Möglichkeiten, Daten in der Cloud zu sichern. Während Sie Ihre App entwickeln und die Art der zu speichernden Daten bewerten, können Sie die Entscheidung treffen, welche Implementierung Sie wählen.

Wir hoffen, dass Sie diese Tools nutzen werden, um alles in Ihrer Macht Stehende zu tun, damit die Daten Ihrer App und Ihrer Nutzer sicher sind. Gemeinsam können wir das Internet zu einem sichereren Ort machen.


Leave a reply

Your email address will not be published.