Подтвердить что ты не робот

Используются ли атаки CSRF для API?

В частности, я пишу API Django RESTful для поддержки приложения iOS, и я продолжаю работать в защите Django CSRF всякий раз, когда я пишу методы для обработки запросов POST.

Я понимаю, что файлы cookie, управляемые iOS, не распространяются приложениями, что означает, что мои сеансовые файлы cookie безопасны, и никакое другое приложение не может ездить на них. Это правда? Если да, могу ли я просто пометить все мои функции API как освобожденные CSRF?

4b9b3361

Ответ 1

Это не цель CSRF. CSRF предотвращает прямое размещение данных на вашем сайте. Другими словами, клиент должен отправлять сообщения по утвержденному пути, то есть просматривать страницу формы, заполнять ее, отправлять данные.

API в значительной степени исключает CSRF, поскольку вся его цель состоит в том, чтобы позволить сторонним объектам получать доступ к данным на вашем сайте и манипулировать ими на вашем сайте ( "кросс-сайт" в CSRF). Итак, да, я думаю, что, как правило, любой вид API должен быть исключен CSRF. Тем не менее, вы все равно должны следовать лучшим практикам и защищать каждую конечную точку API, которая фактически вносит изменения с некоторой формой аутентификации, например OAuth.

Ответ 2

Атаки CSRF полагаются на куки файлы, которые неявно отправляются со всеми запросами в конкретный домен. Если конечные точки API не разрешают проверку на основе файлов cookie, вы должны быть хорошими.

Даже если вы используете аутентификацию на основе файлов cookie, ваши файлы cookie безопасны, потому что приложения iOS не используют файлы cookie. Однако, если вы не намеренно блокируете веб-браузеры, требуя необычного заголовка пользовательского агента, другая сторона может создать приложение на основе браузера, которое использует ваш API, и это приложение будет уязвимым для атак CSRF, если ваш API поддерживает проверку подлинности на основе файлов cookie и не делает Не применяйте защиту CSRF.

Ответ 3

Они применяются, если вы также используете свой API для поддержки веб-сайта.

В этом случае вам по-прежнему нужна некоторая форма защиты CSRF, чтобы кто-то не включал запросы на других сайтах, чтобы иметь влияние на учетную запись аутентифицированного пользователя.

Chrome, по-видимому, отклоняет запросы POST с кросс-началом по умолчанию (другие браузеры могут быть не такими уж строгими), но разрешает кросс-начало запросов GET, поэтому вы должны убедиться, что любые запросы GET в вашем API не имеют побочных эффектов.

Ответ 4

Этот принятый в настоящее время ответ (май 2012 г.) в основном правильный, за исключением случаев, когда вы используете аутентификацию на основе сеанса. Также стоит упомянуть о роли CORS.

Простой сценарий заключается в том, что вы посещаете foo.com, и веб-сайт выполняет Javascript, чтобы сделать запрос DELETE на основе AJAX на api.com/users/123 и в итоге удаляет пользователя от вашего имени. Теперь это не всегда возможно из-за CORS - браузеры предотвратят foo.com от запроса на api.com, если только api.com явно не белые списки foo.com. Это также предполагает, что вы используете аутентификацию на основе сеанса для своих API, а не аутентификацию на основе токенов. При аутентификации на основе сеанса любой пользователь, который вошел в систему api.com, может выполнять запросы, пока они остаются в системе. Если у вас есть аутентификация на основе токена (каждый запрос должен быть обработан заголовком HTTP Authorization, содержащим токен аутентификации) то вы в безопасности. Аутентификация на основе сеанса неявно отправляет токен аутентификации через файлы cookie.

В худшем случае, если один из ваших доверенных доменов CORS становится скомпрометированным - скажите, что у вас есть форма, которая не дезинфицирует Javascript, и пользователь не сможет ввести JS на ваш сайт через эту форму. Если вы используете аутентификацию на основе сеанса, то пользователь, прошедший проверку подлинности, посещая страницу, увидит запуск Javascript и сделает запрос API. Это может быть катастрофическим и очень реальной возможностью, если вы используете аутентификацию на основе сеанса для своего API.

Ответ 5

Согласно документация по DRF, API уязвимы для атаки CSRF, если сервер использует аутентифицированный сеанс (вместо того, чтобы запрашивать каждый пароль)

Решение

  • Убедитесь, что "безопасные" HTTP-операции, такие как GET, HEAD и OPTIONS не может использоваться для изменения любого состояния на стороне сервера.
  • Убедитесь, что любые "небезопасные" HTTP-операции, такие как POST, PUT, PATCH и DELETE, всегда требуют действительного токена CSRF.