Я создаю веб-службу, которая использует исключительно JSON для своего содержимого запроса и ответа (т.е. полезные нагрузки, не закодированные в форме).
Уязвима ли веб-служба для атаки CSRF, если верно следующее?
Любой
POSTзапрос без объекта JSON верхнего уровня, например,{"foo":"bar"}будет отклонен с 400. Например,POSTзапрос с содержимым42будет таким образом отклонен.Любой
POSTзапрос с типом содержимого, отличным от типа,application/jsonбудет отклонен с 400. Например,POSTзапрос с типом содержимогоapplication/x-www-form-urlencodedбудет таким образом отклонен.Все запросы GET будут безопасными и, следовательно, не будут изменять какие-либо данные на стороне сервера.
Клиенты аутентифицируются с помощью файла cookie сеанса, который веб-служба предоставляет им после того, как они предоставят правильную пару имени пользователя и пароля через POST с данными JSON, например
{"username":"user@example.com", "password":"my password"}.
Вспомогательные вопросы: Аре PUTи DELETEзапросы всегда уязвимы для CSRF? Я спрашиваю, потому что кажется, что большинство (всех?) Браузеров запрещают эти методы в формах HTML.
РЕДАКТИРОВАТЬ: добавлен пункт №4.
РЕДАКТИРОВАТЬ: Пока много хороших комментариев и ответов, но никто не предлагал конкретную CSRF-атаку, для которой этот веб-сервис уязвим.