2015-06-03 19 views
7

Używam przepływu OAuth 2.0 poświadczeń właściciela zasobu w SPA AngularJS. Istnieje kilka artykułów (here, here ..) i odpowiedź na this question, które wyjaśniają, że nie powinniśmy przechowywać odświeżania tokenów na kliencie (web) (LocalStorage), ale przechowują je zaszyfrowane w HttpOnly Cookie i używają interfejsu API proxy, gdzie zaimplementuj odszyfrowanie tokena refreh w celu przekazania go do usługi tokena zabezpieczającego.Ochrona CSRF w celu odświeżenia tokena Cookie w SPA

Większość artykułów daje wskazówkę, że powinniśmy dbać o CSRF za pomocą jednego z powszechnych mechanizmów ochrony. Zastanawiam się, jakie jest najlepsze rozwiązanie w aplikacji na jedną stronę.

Odnośnik Angular $http wyjaśnia domyślny mechanizm, w jaki sposób należy odliczać CSRF: Serwer musi ustawić plik cookie o nazwie XSRF-TOKEN. Ten plik cookie musi być odczytywany przez Javascript, abyśmy mogli ustawić nagłówek HTTP X-XSRF-TOKEN w naszych żądaniach. Czy ten mechanizm jest wystarczający, aby chronić scenariusz toresztu refreh?

  1. Uruchom aplikację po raz pierwszy. Brak dostępowego tokena i pliku cookie, musimy zalogować się przy użyciu nazwy użytkownika i hasła. api/login daje nam token dostępu, który przechowujemy w pamięci i ustawia dwa pliki cookie. HttpOnly refreh token cookie oraz plik cookie, który można odczytać w formacie JS XSRF-TOKEN.

  2. Token dostępu wygaśnie. Połączenie z api/token sprawdza poprawność XSRF-TOKEN i używa pliku cookie tokena do zwrócenia nowego tokena dostępu; ustawia nowy plik cookie odświeżania

  3. Uruchom ponownie aplikację od AppCache. Brak tokena dostępowego w pamięci, ale pliki cookie są dostępne. Użyj api/token ...

  4. Zły facet chce ukraść nasze ciasteczko refreh. Przygotowana strona wysyła zapytanie pod numer api/token z naszymi ciasteczkami, ale bez nagłówka HTTP X-XSRF-TOKEN.

Jakieś poważne problemy z bezpieczeństwem?

+0

Cóż, to nadal nie chroni przed sesją/cookie/hijack localStorage. Aby to zrobić, musisz dodatkowo zweryfikować ostatni ważny token dostępu w kroku 2 - to zapewni, że skradzione pliki cookie przestaną być ważne. – Hatch

Odpowiedz

1

O ile mi wiadomo, najlepszym sposobem na to jest, gdy serwer renderuje index.html z tokenem CSFR wewnątrz, a następnie funkcjonuje jako standardowe AngularJS SPA. Tak więc index.html jest następnie wzbogacany tokenem CSFR generowanym przez usługę/strukturę backendu. SpringSecurity zapewnia dobre wsparcie dla tych tokenów iniekcyjnych dla szablonów.

Po tym, można otrzymać token z szablonu z JavaScript i ustawić go do wszystkich swoich $http wniosków w nagłówkach za pomocą httpInterceptor „s, request haka. (lub ciasteczko)? Nie pamiętam dokładnie, co to jest właściwa droga, ale jestem pewien, że jest to opisane w artykułach, o których wspomniałeś powyżej)

Powiązane problemy