Czy usługi JSON web Services są podatne na ataki CSRF?
Buduję serwis internetowy, który używa wyłącznie JSON do swoich żądań i odpowiedzi (tj. bez zakodowanych form).
Czy usługa internetowa jest podatna na atak CSRF, Jeśli poniższe informacje są prawdziwe?
Każde żądanie
POST
bez najwyższego poziomu obiektu JSON, np.{"foo":"bar"}
, zostanie odrzucone za pomocą 400. Na przykład żądaniePOST
o treści42
zostanie odrzucone.Dowolne
POST
żądanie o typie treści innym niżapplication/json
zostanie odrzucona z 400. Na przykład żądaniePOST
z typem zawartościapplication/x-www-form-urlencoded
zostanie odrzucone.Wszystkie żądania GET będą bezpieczne , a tym samym nie będą modyfikować żadnych danych po stronie serwera.
Klienci są uwierzytelniani za pomocą pliku cookie sesji, który serwis internetowy daje im po podaniu poprawnej pary nazwy użytkownika/hasła za pośrednictwem postu z danymi JSON, np.
{"username":"[email protected]", "password":"my password"}
.
Dodatkowe pytanie: czy PUT
i DELETE
prośby kiedykolwiek podatny na CSRF? Pytam, bo wydaje się, że większość(wszystkie?) przeglądarki nie akceptują tych metod w formularzach HTML.
EDIT: Dodano pozycję # 4.
EDIT: wiele dobrych komentarzy i odpowiedzi do tej pory, ale nikt nie zaoferował konkretnego ataku CSRF, na który ten serwis internetowy jest podatny.
5 answers
Tworzenie dowolnych żądań CSRF z dowolnymi typami nośników jest możliwe tylko w XHR, ponieważ metoda formularza jest ograniczona do GET I POST, A treść wiadomości POST jest również ograniczona do trzech formatów application/x-www-form-urlencoded
, multipart/form-data
, oraz text/plain
. Jednak z kodowaniem danych formularza text/plain
nadal możliwe jest podrabianie żądań zawierających ważne dane JSON.
Więc jedyne zagrożenie pochodzi z ataków CSRF opartych na XHR. A te odniosą sukces tylko wtedy, gdy są albo
- uruchomić z tego samego pochodzenia, więc w zasadzie z własnej strony jakoś (np. XSS), lub
- Uruchom z innego źródła, a twój serwer zezwala na takie żądania cross-origin .
Jeśli możesz wyeliminować oba, Twoja usługa internetowa nie jest podatna na CSRF. Przynajmniej nie te wykonywane przez przeglądarkę internetową.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29
Możliwe jest wykonywanie CSRF na usługach Restful opartych na JSON przy użyciu Ajax. Przetestowałem to na aplikacji (za pomocą Chrome i Firefox). Musisz zmienić typ contentType na text / plain, a typ danych na JSON, aby otrzymać żądanie inspekcji wstępnej. Następnie możesz wysłać żądanie, ale aby wysłać sessiondata, musisz ustawić flagę withCredentials w żądaniu ajax. Omawiam to bardziej szczegółowo tutaj (odniesienia są "included"): {]}
Http://wsecblog.blogspot.be/2016/03/csrf-with-json-post-via-ajax.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-18 10:47:00
Tak, to możliwe. Możesz skonfigurować serwer atakujący, który wyśle przekierowanie 307 na serwer docelowy do maszyny ofiary. Musisz użyć Flasha, aby wysłać wiadomość zamiast używać formularza.
Odniesienie: https://bugzilla.mozilla.org/show_bug.cgi?id=1436241
Działa również na Chrome.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 23:57:13
Mam pewne wątpliwości co do punktu 3. Chociaż może być uważany za bezpieczny, ponieważ nie zmienia danych po stronie serwera, dane mogą być nadal odczytywane, a ryzyko jest takie, że mogą zostać skradzione.
Http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 17:34:03
Tak. To wciąż HTTP.Czy usługa internetowa jest podatna na atak CSRF, Jeśli poniższe informacje są prawdziwe?
Czy żądania PUT I DELETE są zawsze podatne na CSRF?
Tak
Wydaje się, że większość(wszystkie?) przeglądarki nie zezwalają na te metody w formularzach HTML
Czy uważasz, że przeglądarka jest jedynym sposobem na wysłanie żądania HTTP?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 08:53:03