Я создаю веб-службу, которая исключительно использует JSON для своего содержимого запроса и ответа (то есть без кодированных полезных данных).
Является ли веб-служба уязвимой для атаки CSRF, если верно следующее:
-
Любой запрос
POST
без объекта JSON верхнего уровня, например,{"foo":"bar"}
, будет отклонен с 400. Например, запросPOST
с содержимым42
будет таким образом отклонен. -
Любой запрос
POST
с типом контента, отличным отapplication/json
, будет отклонен с 400. Например, запросPOST
с типом контентаapplication/x-www-form-urlencoded
будет таким образом отклонен. -
Все запросы GET будут безопасно и, таким образом, не будут модифицировать серверные данные.
-
Клиенты аутентифицируются через куки файлы сеанса, которые веб-служба предоставляет им после того, как они предоставляют правильную пару имени пользователя/пароля через POST с данными JSON, например.
{"username":"[email protected]", "password":"my password"}
.
Вспомогательный вопрос: запросы PUT
и DELETE
всегда уязвимы для CSRF? Я спрашиваю, потому что кажется, что большинство (всех?) Браузеров запрещают эти методы в HTML-формах.
EDIT: Добавлен элемент # 4.
EDIT: много хороших комментариев и ответов до сих пор, но никто не предлагал конкретную атаку CSRF, для которой этот веб-сервис уязвим.