Вопросы по JS

Что такое CSRF атаки и методы защиты от них

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

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

  1. Аутентификация: Пользователь аутентифицирован на сайте (например, на сайте банка).
  2. Несанкционированный запрос: Злоумышленник отправляет пользователю ссылку, которая вызывает действие на целевом сайте (например, перевод денег).
  3. Выполнение запроса: Когда пользователь переходит по ссылке, браузер автоматически отправляет запрос к целевому сайту с текущими куками, которые подтверждают его идентификацию.

Пример 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

  1. 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>
    

    На сервере вы должны проверять этот токен при обработке запроса.
  2. Проверка Referer: Сервер может проверять заголовок Referer, чтобы убедиться, что запрос пришел с ожидаемого сайта. Однако этот метод не всегда надежен, поскольку заголовок может быть удален прокси-серверами или браузерами.
  3. SameSite Cookies: Использование атрибута SameSite для куки помогает предотвратить отправку куки с межсайтовыми запросами. Это средство стало стандартом в большинстве современных браузеров.
    Set-Cookie: sessionId=abc123; SameSite=Strict;
    

Заключение

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