/ / Verhindern des Zugriffs auf JSON-Daten in einer Angular-App - json, anglejs, security

Verhindern des Zugriffs auf JSON-Daten in einer Angular-App - json, anglejs, security

Ich bekam ein (Flasche) Backend für eine API, die dient JSON zu einem Eckig App

Ich liebe die Tatsache, dass mein Backend (Algorithmen,Datenbank) ist vollständig von meinem Frontend (Design, Benutzeroberfläche) getrennt, da es buchstäblich von zwei verschiedenen Servern ausgeführt werden kann. Da die Ansicht jedoch vollständig clientseitig generiert wird, kann jeder auf die zugreifen JSON Daten offensichtlich. Angenommen, die Anwendung ist eine einfache Liste von Dingen (die Dinge werden in einer JSON-Datei gespeichert).

Um einen direkten Zugriff auf meine Datenbank durch zu verhindern JSON In der Browserkonsole habe ich folgende Optionen gefunden:

  • Verschlüsselung der Daten (schwach, da die Entschlüsselungsfunktion im Javascript frei sichtbar ist, aber beim Umgang mit minimierten Dateien nicht so einfach)
  • Anstatt von $http.get die ganze Datenbank dann mit Winkel filtern, $http.get viele Male (wenn der Benutzer beispielsweise eine Liste scrollt), so dass das Crawlen programmgesteuert schwieriger ist

Ich glaube, meine Optionen sind immer noch schwach. Wie könnte ich es einem Hacker erschweren, die gesamte Datenbank zu crawlen? Irgendwelche Ideen ?

Antworten:

4 für die Antwort № 1

Wie ich diese Frage verstehe - sollte der BenutzerSie dürfen über Ihre Benutzeroberfläche auf alle Daten zugreifen, möchten jedoch nicht, dass sie direkt auf die API zugreifen. Wie Sie herausgefunden haben, können keine Daten, auf die der Client zugreift, gesichert werden, aber wir können den Zugriff auf PITA etwas vereinfachen.

Eine übliche Methode, dies zu tun, besteht darin, die zu überprüfen HTTP-Referer. Wenn Sie über die Benutzeroberfläche den Server anrufenSie erhalten die Seite, von der die Anfrage stammt. Dies wird normalerweise verwendet, um zu verhindern, dass Personen Mashups erstellen, die Ihre Daten ohne Erlaubnis verwenden. Wie bei allen HTTP-Anforderungsheadern verlassen Sie sich darauf, dass der Anrufer ehrlich ist. Dies schützt Sie nicht vor Konsolenhacking oder vor jemandem, der einen Scraper in einer anderen Sprache schreibt. @sehen CSRF

Eine andere Idee ist, ein variables Token in das einzubettenHTML-Quelle, die Ihre App bootstraps. Sie können dies als Winkelkonstante oder globale Variable angeben und in alle Ihre $ http-Anforderungen aufnehmen. Das Token selbst kann für jede Sitzung eindeutig sein oder ein verschlüsseltes Ablaufdatum sein, das nur der Server verarbeiten kann. Diese Methode ist jedoch fehlerhaft, da jemand die HTML-Quelle analysieren, den Code abrufen und dann eine Anfrage stellen kann.

Sie können es also wirklich jemandem schwerer machen, aber es ist kaum narrensicher.

Wenn Benutzer nur auf einige der Daten zugreifen können sollen, können Sie so etwas wie Firebase ausprobieren. Hier können Sie Regeln definieren, wer auf was zugreifen kann.


1 für die Antwort № 2

Sicherheitsüberlegungen Berücksichtigen Sie beim Entwerfen von Webanwendungen Sicherheitsbedrohungen durch:

JSON-Schwachstelle XSRF Sowohl der Server als auch derDer Kunde muss mitarbeiten um diese Bedrohungen zu beseitigen. Angular ist vorkonfiguriert mit Strategien, die diese Probleme angehen, aber damit dies im Backend funktioniert Serverkooperation ist erforderlich.

JSON Vulnerability Protection Ein JSONSicherheitslücke ermöglicht Dritte Website, um Ihre JSON-Ressourcen-URL unter einigen in JSONP-Anforderungen umzuwandeln Bedingungen. Um dem entgegenzuwirken, kann Ihr Server allen JSON-Anforderungen ein Präfix voranstellen mit der folgenden Zeichenfolge ")]}", n ". Angular entfernt automatisch die Präfix vor der Verarbeitung als JSON.

Zum Beispiel, wenn Ihr Server zurückkehren muss:

["eins", "zwei"], der anfällig für Angriffe ist, kann Ihr Server Folgendes zurückgeben:

)]} ", [" eins "," zwei "] Angular entfernt das Präfix vor der Verarbeitung der JSON.

XSRF-Schutz (Cross Site Request Forgery) XSRFist eine Technik von welche eine nicht autorisierte Site die privaten Daten Ihres Benutzers erhalten kann. Angular bietet einen Mechanismus zum Gegensteuern von XSRF. Wenn Sie XHR-Anforderungen ausführen, Der $ http-Dienst liest ein Token aus einem Cookie (standardmäßig XSRF-TOKEN). und setzt es als HTTP-Header (X-XSRF-TOKEN). Da nur JavaScript das auf Ihrer Domain läuft könnte das Cookie lesen, Ihr Server kann es sein versichert, dass das XHR von JavaScript stammt, das auf Ihrer Domain ausgeführt wird. Das Der Header wird nicht für domänenübergreifende Anforderungen festgelegt.

Um dies nutzen zu können, muss Ihr ServerSetzen Sie ein Token in a JavaScript-lesbares Sitzungscookie namens XSRF-TOKEN auf dem ersten HTTP GET Anfrage. Bei nachfolgenden XHR-Anforderungen kann der Server überprüfen, ob die Das Cookie entspricht dem X-XSRF-TOKEN-HTTP-Header. Stellen Sie daher sicher, dass Nur JavaScript, das auf Ihrer Domain ausgeführt wird, konnte die Anfrage senden. Das Token muss für jeden Benutzer eindeutig sein und von der überprüft werden können Server (um zu verhindern, dass das JavaScript seine eigenen Token erstellt). Wir empfehlen, dass das Token eine Zusammenfassung der Authentifizierung Ihrer Site ist Keks mit einem Salz für zusätzliche Sicherheit.

Der Name der Header kann mit angegeben werdender xsrfHeaderName und xsrfCookieName-Eigenschaften von $ httpProvider.defaults at Konfigurationszeit, $ http.defaults zur Laufzeit oder die Konfiguration pro Anforderung Objekt.

Bitte verweisen Sie auf den folgenden Link,

https://docs.angularjs.org/api/ng/service/$ http


0 für die Antwort № 3

Von AngularJS-DOCs

JSON Vulnerability Protection Eine JSON-Sicherheitsanfälligkeit ermöglicht es Websites von Drittanbietern, Ihre JSON-Ressourcen-URL unter bestimmten Bedingungen in JSONP-Anforderungen umzuwandeln. Um dem entgegenzuwirken, kann Ihr Server allen JSON-Anforderungen die folgende Zeichenfolge voranstellen ")]}",n". Angular entfernt das Präfix automatisch, bevor es als JSON verarbeitet wird.

Es gibt andere Techniken wie XSRF-Schutz und Transformationen, die die Sicherheit Ihrer JSON-Kommunikation weiter erhöhen. Weitere Informationen hierzu finden Sie in AngularJS Docs https://docs.angularjs.org/api/ng/service/$http


0 für die Antwort № 4

Möglicherweise möchten Sie JSON-Web-Token verwendendafür. Ich bin nicht sicher, wie ich dies in Flask implementieren soll, aber hier ist ein anständiges Beispiel dafür, wie es mit einem Nodejs-Backend gemacht werden kann. Dieses Beispiel zeigt zumindest, wie Sie es in Angularjs implementieren können.

http://www.kdelemme.com/2014/03/09/authentication-with-angularjs-and-a-node-js-rest-api/

Update: JWT für Flask:

https://github.com/mattupstate/flask-jwt