/ / Zapobieganie dostępowi do danych JSON w aplikacji Angular - json, angularjs, security

Zapobieganie dostępowi do danych JSON w aplikacji Angular - json, angularjs, bezpieczeństwo

Mam (Kolba) backend zasilający API, który służy JSON do Kątowy aplikacja.

Uwielbiam fakt, że mój backend (algorytmy,baza danych) jest całkowicie odłączony od mojego interfejsu (projekt, interfejs użytkownika), ponieważ może dosłownie działać z dwóch różnych serwerów. Ponieważ widok jest w całości generowany po stronie klienta, każdy może uzyskać do niego dostęp JSON dane oczywiście. Powiedzmy, że aplikacja jest prostą listą rzeczy (rzeczy są przechowywane w pliku JSON).

Aby zapobiec bezpośredniemu dostępowi do mojej bazy danych przez JSON w konsoli przeglądarki znalazłem te opcje:

  • Szyfrowanie danych (słabe, ponieważ funkcja deszyfrowania będzie swobodnie widoczna w javascript, ale nie tak łatwo, gdy mamy do czynienia z zminimalizowanymi plikami)
  • Zamiast $http.get cała baza danych następnie filtruje kątowo, $http.get wiele razy (na przykład, gdy użytkownik przewija listę), przez co indeksowanie jest trudniejsze programowo

Wierzę, że moje opcje są nadal słabe. Jak mogę utrudnić hakerowi przeszukiwanie całej bazy danych? Jakieś pomysły ?

Odpowiedzi:

4 dla odpowiedzi № 1

Jak rozumiem to pytanie - użytkownik powinienmieć dostęp do wszystkich danych za pośrednictwem interfejsu użytkownika, ale nie chcesz, aby mieli bezpośredni dostęp do interfejsu API. Jak się zorientowałeś, żadnych danych, do których klient ma dostęp, nie można zabezpieczyć, ale możemy sprawić, że dostęp do nich będzie trochę większy w przypadku PITA.

Jednym z powszechnych sposobów na to jest sprawdzenie Referer HTTP. Gdy wykonujesz połączenie z interfejsu użytkownika, serwerzostanie podana strona, z której pochodzi żądanie. Jest to zwykle stosowane w celu zapobiegania tworzeniu przez użytkowników mashupów, które wykorzystują twoje dane bez pozwolenia. Podobnie jak w przypadku wszystkich nagłówków żądań HTTP, powinieneś polegać na tym, że osoba dzwoniąca jest prawdomówna. Nie uchroni Cię to przed hackowaniem konsoli lub pisaniem skrobaka w innym języku. @widzieć CSRF

Innym pomysłem jest osadzenie zmiennego tokena wźródło HTML, które ładuje aplikację. Możesz podać tę wartość jako stałą kątową lub zmienną globalną i uwzględnić ją we wszystkich żądaniach $ http. Sam token może być unikalny dla każdej sesji lub być zaszyfrowaną datą ważności, którą może przetwarzać tylko serwer. Jednak ta metoda jest wadliwa, ponieważ ktoś może przeanalizować źródło HTML, pobrać kod, a następnie złożyć żądanie.

Tak naprawdę, możesz utrudnić komuś, ale nie jest to niezawodne.

Jeśli użytkownicy powinni mieć dostęp tylko do niektórych danych, możesz wypróbować coś takiego jak firebase. Pozwala zdefiniować reguły dotyczące tego, kto może uzyskać dostęp do czego.


1 dla odpowiedzi nr 2

Uwagi dotyczące bezpieczeństwa Podczas projektowania aplikacji internetowych należy wziąć pod uwagę zagrożenia bezpieczeństwa z:

Luka JSON XSRF Zarówno serwer, jak iklient musi współpracować aby wyeliminować te zagrożenia. Angular jest wstępnie skonfigurowany z strategie, które rozwiązują te problemy, ale aby to działało wymagana jest współpraca z serwerem.

JSON Ochrona przed lukami w zabezpieczeniach JSONpodatność pozwala stronom trzecim strona internetowa, aby pod niektórymi zmienić adres URL zasobu JSON w żądanie JSONP warunki. Aby temu zaradzić, serwer może prefiksować wszystkie żądania JSON z następującym ciągiem „)]}”, n ”. Angular automatycznie usunie przedrostek przed przetworzeniem go jako JSON.

Na przykład, jeśli serwer musi zwrócić:

[„jeden”, „dwa”], który jest podatny na atak, Twój serwer może zwrócić:

)]} ”, [„ one ”,„ two ”] Angular usunie przedrostek przed przetworzeniem JSON.

Ochrona przed fałszowaniem żądań witryny (XSRF) XSRFjest techniką autorstwa które nieautoryzowana witryna może uzyskać prywatne dane użytkownika. Angular zapewnia mechanizm przeciwdziałania XSRF. Podczas wykonywania żądań XHR usługa $ http odczytuje token z pliku cookie (domyślnie XSRF-TOKEN) i ustawia go jako nagłówek HTTP (X-XSRF-TOKEN). Ponieważ tylko JavaScript działający w domenie może odczytać plik cookie, może to być serwer zapewniłem, że XHR pochodzi z JavaScript działającego w Twojej domenie. The nagłówek nie będzie ustawiony dla żądań między domenami.

Aby skorzystać z tego, Twój serwer musiustaw token w Sesyjny plik cookie sesji o nazwie XSRF-TOKEN na pierwszym HTTP Uzyskaj żądanie. Przy kolejnych żądaniach XHR serwer może sprawdzić, czy plik cookie pasuje do nagłówka HTTP X-XSRF-TOKEN, dlatego należy się upewnić tylko JavaScript działający w Twojej domenie mógł wysłać żądanie. Token musi być unikalny dla każdego użytkownika i musi być możliwy do zweryfikowania przez serwer (aby zapobiec tworzeniu własnych tokenów w JavaScript). My zalecamy, aby token był podsumowaniem uwierzytelniania witryny ciasteczko z solą dla większego bezpieczeństwa.

Nazwę nagłówków można określić za pomocąxsrfHeaderName i Właściwości xsrfCookieName z $ httpProvider.defaults at config-time, $ http.defaults w czasie wykonywania lub konfiguracja na żądanie obiekt.

Prosimy zapoznać się z poniższym linkiem,

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


0 dla odpowiedzi № 3

Od AngularJS DOCs

Ochrona przed lukami w zabezpieczeniach JSON Luka JSON umożliwia stronie internetowej strony trzeciej zamianę adresu URL zasobu JSON w żądanie JSONP pod pewnymi warunkami. Aby temu zaradzić, serwer może poprzedzić wszystkie żądania JSON następującym ciągiem ")]}",n". Angular automatycznie usunie prefiks przed przetworzeniem go jako JSON.

Istnieją inne techniki, takie jak ochrona XSRF i transformacje, które dodatkowo zwiększą bezpieczeństwo komunikacji JSON. więcej na ten temat można znaleźć w AngularJS Docs https://docs.angularjs.org/api/ng/service/$http


0 dla odpowiedzi nr 4

Możesz rozważyć użycie tokenów internetowych JSONdla tego. Nie jestem pewien, jak zaimplementować to w Flask, ale oto dobry przykład, jak można to zrobić za pomocą backendu Nodejsa. Ten przykład przynajmniej pokazuje, jak można to zaimplementować w Angularjs.

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

Aktualizacja: JWT dla Flask:

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