Поиск по сайту
Ctrl + K
Вопросы по JS

Объясните концепцию подделки межсайтовых запросов (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 — это важная часть безопасности веб-разработки, и новичкам в данной области стоит уделить этому внимательное внимание.