CSRF: Подделка межсайтовых запросов

Источник: «Cross-site request forgery (CSRF)»
В этой статье мы объясним, что такое подделка межсайтовых запросов, опишем несколько примеров уязвимостей CSRF и разберём, как предотвратить CSRF атаку.

Что такое CSRF

Подделка межсайтовых запросов CSRF — уязвимость веб безопасности позволяющая злоумышленникам побуждать пользователей выполнять действия, которые они не намерены выполнять. Это позволяет злоумышленнику частично обойти политику одинакового источника (same-origin policy), предназначенную для предотвращения взаимодействия различных веб сайтов друг с другом.

Какие последствия CSRF атаки

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

Как работает CSRF

Чтобы CSRF атака была возможно, должны быть соблюдены три условия:

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

POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE

email=wiener@normal-user.com

Это соответствует условиям необходимым для CSRF атаки:

С учётом этих условий злоумышленник может создать веб-страницу содержащую следующий HTML-код:

<html>
<body>
<form action="https://vulnerable-website.com/email/change" method="POST">
<input type="hidden" name="email" value="pwned@evil-user.net" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>

Если пользователь-жертва посещает веб-страницу злоумышленника, происходит следующее:

Хотя CSRF обычно описывается в связи с обработкой сеансов на основе cookie сессий, он также возникает в других контекстах, когда приложение автоматически добавляет некоторые учётные данные пользователя в запросы, такие как базовая аутентификация HTTP и аутентификация на основе сертификатов.

Как доставляют CSRF эксплойт

Механизмы доставки для атак с подделкой межсайтовых запросов практически такие же, как и для отражённых XSS. Как правило, злоумышленник размещает вредоносный HTML-код на контролируемом им веб-сайте, а затем побуждает жертву посетить этот веб-сайт. Это можно сделать предоставив пользователю ссылку на веб-сайт по электронной почте или в сообщении соцсети. Или, если атака размещена на популярном веб-сайте (например, в комментарии пользователя), они могут просто подождать, пока пользователи не посетят веб-сайт.

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

<img src="https://vulnerable-website.com/email/change?email=pwned@evil-user.net">

Основные способы защиты от CSRF атак

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

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

Дополнительные материалы

Предыдущая Статья

PHP: Зачем следовать PSR-20

Следующая Статья

Laravel: Как автоматически вернуть JSON для Eloquent