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?

  1. Każde żądanie POST bez najwyższego poziomu obiektu JSON, np. {"foo":"bar"}, zostanie odrzucone za pomocą 400. Na przykład żądanie POST o treści 42 zostanie odrzucone.

  2. Dowolne POST żądanie o typie treści innym niż application/json zostanie odrzucona z 400. Na przykład żądanie POST z typem zawartości application/x-www-form-urlencoded zostanie odrzucone.

  3. Wszystkie żądania GET będą bezpieczne , a tym samym nie będą modyfikować żadnych danych po stronie serwera.

  4. 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.

Author: djsmith, 2012-06-13

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

Jeśli możesz wyeliminować oba, Twoja usługa internetowa nie jest podatna na CSRF. Przynajmniej nie te wykonywane przez przeglądarkę internetową.

 55
Author: Gumbo,
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

 1
Author: Filip Waeytens,
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.

 0
Author: Timothy Leung,
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/

 -1
Author: panteo,
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

Czy usługa internetowa jest podatna na atak CSRF, Jeśli poniższe informacje są prawdziwe?

Tak. To wciąż HTTP.

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?

 -6
Author: symcbean,
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