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