Что такое CSRF атаки и методы защиты от них
Подделка межсайтовых запросов (CSRF) — это тип интернет-атаки, при которой злоумышленник заставляет пользователя выполнить нежелательное действие на веб-приложении, в котором он аутентифицирован. Это происходит, когда жертва, находясь в аутентифицированной сессии, нажимает на вредоносную ссылку или загружает страницу, содержащую код, предназначенный для выполнения запроса к веб-приложению от имени жертвы.
Как работает CSRF?
- Аутентификация: Пользователь аутентифицирован на сайте (например, на сайте банка).
- Несанкционированный запрос: Злоумышленник отправляет пользователю ссылку, которая вызывает действие на целевом сайте (например, перевод денег).
- Выполнение запроса: Когда пользователь переходит по ссылке, браузер автоматически отправляет запрос к целевому сайту с текущими куками, которые подтверждают его идентификацию.
Пример CSRF атаки
Предположим, у нас есть веб-приложение, где есть форма для перевода денег:
<form action="https://bank.com/transfer" method="POST">
<input type="hidden" name="amount" value="1000">
<input type="hidden" name="to" value="attacker_account">
<input type="submit" value="Send Money">
</form>
Злоумышленник может создать страницу с формой и разместить её на своем сайте. Когда пользователь, уже аутентифицированный в интернет-банке, перейдет по ссылке на страницу злоумышленника, скрипт отправит этот запрос:
<img src="https://bank.com/transfer?amount=1000&to=attacker_account" style="display:none">
Методы защиты от CSRF
- CSRF-токены: Один из самых распространенных методов защиты от CSRF — это использование уникального токена для
каждого запроса. Этот токен должен быть сгенерирован на сервере и включен в каждую форму, отправляемую пользователю.
<form action="/transfer" method="POST"> <input type="hidden" name="_csrf" value="unique_csrf_token"> <input type="hidden" name="amount" value="1000"> <input type="hidden" name="to" value="attacker_account"> <input type="submit" value="Send Money"> </form>
На сервере вы должны проверять этот токен при обработке запроса. - Проверка Referer: Сервер может проверять заголовок
Referer
, чтобы убедиться, что запрос пришел с ожидаемого сайта. Однако этот метод не всегда надежен, поскольку заголовок может быть удален прокси-серверами или браузерами. - SameSite Cookies: Использование атрибута
SameSite
для куки помогает предотвратить отправку куки с межсайтовыми запросами. Это средство стало стандартом в большинстве современных браузеров.Set-Cookie: sessionId=abc123; SameSite=Strict;
Заключение
CSRF-атаки могут быть опасны для пользователей и веб-приложений. Понимание этого механизма и применение таких методов
защиты, как CSRF-токены, проверка Referer
и правильная настройка куки, могут значительно уменьшить риски, связанные с
этими этими атаками. Защита от CSRF — это важная часть безопасности веб-разработки, и новичкам в данной области стоит
уделить этому внимательное внимание.