In regards to this Haacked blog, jestem niezdecydowany do wprowadzenia proponowanych rozwiązań GET porywanie anty-JSON odKorzystanie MVC3 za AntiForgeryToken w HTTP GET, aby uniknąć luki JavaScript CSRF
zalecanych rozwiązań do łagodzenia JSON porwanie obejmować zakaz REST- pełne JSON POSTs do pobrania danych
Alternatywne rozwiązanie (pakowanie obiektów) powoduje problemy z kontrolkami stron trzecich, do których nie mam dostępu z kodem źródłowym.
Nie mogę znaleźć implementacji sprawdzonej przez społeczność, która implementuje rozwiązanie alternatywne (wymienione poniżej) dotyczące tworzenia tokena zabezpieczającego lub bezpiecznego dostarczania go na stronie internetowej. Nie będę też twierdził, że jestem wystarczającym ekspertem, aby zrealizować własną implementację.
nagłówków stron odsyłających nie można powoływać
Tło
This blog opisuje CSRF kwestię dotyczącą JSON porwania i zaleca stosowanie metody POST JSON, aby uzyskać dane. Ponieważ korzystanie z danych POST HTTP do GET nie jest w pełni zajęte REST, szukałem bardziej RESTfull rozwiązania, które umożliwia REST akcje na sesję lub na stronę.
Inną techniką łagodzenia jest zawijanie danych JSON w obiekcie as described here. Obawiam się, że może to tylko opóźnić kwestię, dopóki nie zostanie znaleziona inna technika.
alternatywna Realizacja
Dla mnie wydaje się naturalne, aby rozszerzyć stosowanie ASP.NET MVC's AntiForgeryToken z jQuery HTTP GET dla mojego JSON.
Na przykład jeśli dostanę jakieś poufne dane, zgodnie z linku Haacked powyżej, następujący kod jest podatny:
$.getJSON('[url]', { [parameters] }, function(json) {
// callback function code
});
Zgadzam się, że to nie jest Restfull aby uzyskać dane za pomocą zalecanego POST obejścia. Moją myślą jest wysłanie tokena weryfikacyjnego w adresie URL. W ten sposób osoba atakująca w stylu CSRF nie będzie znała pełnego adresu URL. W pamięci podręcznej lub bez pamięci podręcznej nie będą mogli uzyskać danych.
Poniżej znajdują się dwa przykłady tego, jak można wykonać zapytanie JSON GET. Nie jestem pewien, która implementacja jest najskuteczniejsza, ale można się domyślić, że pierwsza z nich jest bezpieczniejsza, ponieważ błędne serwery proxy buforują te dane, przez co są podatne na atakowanie.
http://localhost:54607/Home/AdminBalances/ENCODEDTOKEN-TOKEN-HERE
lub
http://localhost:54607/Home/AdminBalances?ENCODEDTOKEN-TOKEN-HERE
... który równie dobrze może być MVC3 za AntiForgeryToken albo wariant (see swt) tego rozporządzenia. Ten token zostałby ustawiony jako wartość wbudowana w dowolnym formacie adresu URL wybranym powyżej.Pytania
Przykładowe które uniemożliwiają mi toczenia moje własne rozwiązanie
Jaki format adresu URL (powyżej) należy użyć do sprawdzania GET JSON (ukośnik, questionmark, etc) Czy pełnomocnik odpowiedzi na http://localhost:54607/Home/AdminBalances z danymi http://localhost:54607/Home/AdminBalances?ENCODEDTOKEN-TOKEN-HERE?
Jak dostarczyłbyś zakodowany token na stronę? Inline lub jako zmienna strony?
Jak skomponowałbyś token? Zbudowany w AntiforgeryToken lub w jakiś inny sposób?
AntiForgeryToken używa pliku cookie. Czy w tym przypadku użyjemy/będziemy w tym celu pliku cookie? Tylko HTTP? A co z SSL w połączeniu z HTTP Only?
Jak ustawić nagłówki pamięci podręcznej? Wszystko, co jest specjalne dla Google Web Accelerator (na przykład)
Jakie są konsekwencje po prostu dokonaniu zgłoszenia SSL JSON?
Czy zwrócona tablica JSON nadal jest opakowana w obiekt tylko ze względu na bezpieczeństwo?
Jak będzie to rozwiązanie współdziałanie z proponowanych templating and databinding funkcji Microsoft
powyższe pytania są przyczyny nie będę rozwijał i robi to samodzielnie. Nie wspominając o prawdopodobnych więcej pytaniach, o których nie myślałem, a mimo to ryzykuję.
To tylko wariant CSRF. – SLaks