Уязвимы ли веб-сервисы JSON к CSRF-атакам?

Я создаю веб-службу, которая использует исключительно JSON для содержимого запросов и ответов (т. е. полезные нагрузки, не закодированные в форме).

Уязвим ли веб-сервис к атаке CSRF, если верно следующее?

  1. Любой запрос POSTбез объекта JSON верхнего уровня, например, {"foo":"bar"}, будет отклонен с ошибкой 400. Например, POSTзапрос с содержимым 42будет отклонен.

  2. Любой запрос POSTс типом содержимого, отличным от application/json, будет отклонен с кодом 400. Например, запрос POSTс содержимым- Таким образом, тип application/x-www-form-urlencodedбудет отклонен.

  3. Все запросы GET будут безопаснымии, таким образом, не будут изменять какие-либо данные на стороне сервера.

  4. Клиенты аутентифицируются с помощью файла cookie сеанса, который веб-служба предоставляет им после того, как они предоставляют правильную пару имени пользователя и пароля через POST с данными JSON, например. (скрыто) "пароль":"мой пароль"}.

Дополнительный вопрос: Являются ли запросы PUTи DELETEуязвимыми для CSRF? Я спрашиваю, потому что кажется, что большинство (все?) браузеров запрещают эти методы в HTML-формах.

РЕДАКТИРОВАТЬ: Добавлен пункт №4.

РЕДАКТИРОВАТЬ: До сих пор было много хороших комментариев и ответов, но никто не предложил конкретную атаку CSRF, к которой уязвим этот веб-сервис.

71
задан djsmith 13 June 2012 в 13:09
поделиться