Я создаю веб-службу, которая использует исключительно 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-атаку, для которой этот веб-сервис уязвим.