Защита от CSRF атак с CORS заголовок происхождения и CSRF токена


этот вопрос касается защиты только от атак подделки межсайтовых запросов.

речь идет конкретно о: Является ли защита через заголовок Origin (CORS) такой же хорошей, как защита через токен CSRF?

пример:

  • Алиса вошла в систему (используя куки) со своим браузером в "https://example.com". я предполагаю, что она использует современный браузер.
  • Алиса посещает"https://evil.com", и evil.com ' s код на стороне клиента выполняет какой-то запрос к "https://example.com" (классический сценарий CSRF).

Так:

  • если мы не проверяем заголовок Origin (на стороне сервера), и нет токена CSRF, у нас есть отверстие безопасности CSRF.
  • если мы проверим токен CSRF, мы в безопасности (но это немного утомительно).
  • если мы проверяем заголовок Origin, запрос от evil.com код на стороне клиента должен быть заблокирован так же хорошо, как и когда использование токена CSRF-за исключением, если это возможно как-то для evil.com ' s код для установки заголовка источника.

Я знаю, что это не должно быть возможно с XHR (см., например, безопасность для совместного использования ресурсов между источниками), по крайней мере, если мы доверяем спецификации W3C, которая будет правильно реализована во всех современных браузерах (можем ли мы?)

а как насчет других видов запросов - например, форма отправки? Загрузка скрипта / img/... тег? Или любым другим способом, который страница может использовать для (законного) создания просьба? Или, может быть, какой-то известный JS hack?

примечание: Я не говорю о

  • нативные приложения,
  • манипулировать браузеры,
  • ошибки межсайтового скриптинга в example.com ' s page,
  • ...
2 78

2 ответа:

знайте, что это не должно быть возможно с XHR (см., например, безопасность для совместного использования ресурсов между источниками), по крайней мере, если мы доверяем спецификации W3C, которая будет правильно реализована во всех современных браузерах (можем ли мы?)

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

В то время как были предыдущие уязвимости браузера, такие как те, в IE 5.5 / 6.0 если злоумышленники могли обойти одну и ту же политику происхождения и выполнить атаки, вы обычно можете ожидать, что они будут исправлены сразу же после обнаружения и при автоматическом обновлении большинства браузеров этот риск будет в основном смягченный.

а как насчет других видов запросов - например, форма отправки? Загрузка скрипта / img/... тег? Или любым другим способом страница может использовать (юридически) создать запрос? Или, может быть, какой-то известный JS hack?

The Origin заголовок обычно отправляется только для междоменных запросов XHR. Запросы изображений не содержат заголовка.

примечание: Я не говорю о

  • нативные приложения,

  • манипулировать браузеры,

  • ошибки межсайтового скриптинга в example.com ' s page,

Я не уверен, попадает ли это под манипулируемые браузеры или нет, но старые версии Flash разрешены произвольные заголовки, которые позволят злоумышленнику отправить запрос с поддельным referer заголовок с машины жертвы, чтобы выполнить атаку.

веб-контент не может вмешиваться в заголовок Origin. Кроме того, в соответствии с той же политикой происхождения один источник не может даже отправлять пользовательские заголовки другим источникам. [1]

таким образом, проверка заголовка Origin так же хорош в блокирование атак как использование токена CSRF.

основная проблема с опорой на это заключается в том, позволяет ли он всем законным запросам работать. Спрашивающий знает об этой проблеме и задал вопрос, чтобы исключить основные случаи (нет старых браузеров, только HTTPS).

поставщики браузеров следуют этим правилам, но как насчет плагинов? Они могут и не быть, но вопрос игнорирует "управляемые браузеры."Как насчет ошибок в браузере, которые позволяют злоумышленнику подделать заголовок Origin? Там могут быть ошибки, которые позволяют токену CSRF просачиваться через происхождение тоже, поэтому потребовалось бы больше работы, чтобы утверждать, что один лучше, чем другой.