Достаточно ли проверки реферера для защиты от атаки CSRF? - PullRequest
40 голосов
/ 12 сентября 2009

Достаточно ли проверки реферера для защиты от мошеннических атак на сайт? Я знаю, что реферер может быть подделан, но может ли атакующий сделать это для клиента? Я знаю, что токены являются нормой, но сработает ли это?

Ответы [ 5 ]

39 голосов
/ 04 января 2013

Это трехлетний вопрос с четырьмя различными ответами, в основном утверждающими одно и то же: следуйте норме, используйте токены, не пытайтесь использовать referer.

Несмотря на то, что токены по-прежнему считаются наиболее безопасным вариантом, использование реферера часто намного проще, а также довольно безопасно. Обязательно посмотрите все PUT / POST / PATCH / DELETE-запросы и посчитайте это атакой, если реферер отсутствует или находится не в том домене. Очень немногие (если таковые имеются) прокси удаляют реферер для запросов такого типа.

См. Также рекомендацию OWASP о проверке заголовка реферера в качестве защиты CSRF:

Проверка заголовка реферира

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

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

Есть также распространенные ошибки реализации с проверками реферера. За Например, если атака CSRF происходит из домена HTTPS, то реферер будет опущен. В этом случае отсутствие рефери должно быть считается атакой, когда запрос выполняет состояние менять. Также обратите внимание, что атакующий имеет ограниченное влияние на реферер. Например, если домен жертвы - «site.com», то злоумышленник использует эксплойт CSRF с сайта "site.com.attacker.com" которая может обмануть сломанную реализацию проверки реферера. XSS можно использовать обойти проверку реферера.

11 голосов
/ 12 сентября 2009

Помимо прочего, использование реферера не будет работать для пользователей, чьи браузеры (или корпоративные прокси-серверы) не отправляют рефереры.

4 голосов
/ 07 февраля 2013

Единственно правильный ответ: «Помимо прочего, использование реферера не будет работать для пользователей, чьи браузеры (или корпоративные прокси-серверы) не отправляют рефереры». Это, как говорится, это очень редко в наши дни. Все люди, которые говорят, что источники могут быть подделаны, полны этого. Вы не можете фальсифицировать реферер, если у вас нет другого контроля над браузером другого пользователя (XSS / Trojan / etc). Если вам нужны рефереры для использования приложения, они так же эффективны, как токены CSRF. Просто убедитесь, что вы на 100% уверены, что ваша проверка верна (например, если вы используете регулярное выражение, убедитесь, что вы проверяете с начала «^» реферера).

0 голосов
/ 12 сентября 2009

Следуйте норме: используйте жетоны.

Проверка реферера на самом деле ничего не делает, потому что запрос все равно приходит с этой страницы! Проблема, которую вы пытаетесь предотвратить, заключается в том, что страница запрашивается без участия пользователя; не страница сама по себе.

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

Также может быть уместно учитывать, что это может испортить людей, если они имеют несколько страниц; так что вы можете создать другой токен для каждой страницы.

0 голосов
/ 12 сентября 2009

нет недостаточно, злоумышленнику очень легко сделать это ДЛЯ клиента, как вы просите, все, что нужно сделать злоумышленнику, - это заставить пользователя нажать на созданную им ссылку, с этого моментаигра окончена

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

.на вопрос, токены являются нормой для предотвращения CSRF

...