Вкатываемся в NodeJS Help

Cross site request forgery (CSRF)

Cross-Site Request Forgery (CSRF), также известный как XSRF или Sea Surf - это вид атаки на веб-приложения, при котором злоумышленник заставляет авторизованного пользователя выполнять действия в приложении без его согласия или даже без его знания. Атаки CSRF основаны на том, что многие веб-сайты авторизуют запросы на основе сессионных куки или других аутентификационных механизмов без проверки, откуда пришел запрос. Это позволяет злоумышленнику подделать запросы от имени аутентифицированного пользователя.

Пример атаки CSRF может выглядеть следующим образом:

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

  2. Злоумышленник отправляет пользователю электронное письмо с вредоносной ссылкой или встраивает эту ссылку в веб-страницу, которую видит пользователь.

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

Для защиты от атак CSRF веб-разработчики могут использовать следующие методы:

  1. Проверка Referer заголовка: Сервер может проверить заголовок Referer в HTTP-запросе, чтобы убедиться, что запрос пришел с того же домена, что и веб-сайт. Однако это не всегда надежный способ, так как некоторые браузеры или прокси-серверы могут блокировать или изменять этот заголовок.

  2. Использование токенов CSRF (CSRF tokens): При каждой форме или запросе, который требует аутентификации, включается уникальный токен CSRF. Этот токен хранится в сессии пользователя и включается в каждый запрос. Сервер проверяет соответствие токена в запросе и токена в сессии. Если они не совпадают, запрос отклоняется как поддельный.

  3. SameSite атрибут для куки: SameSite - это атрибут куки, который определяет, как куки должны быть отправлены с запросами. Установка атрибута SameSite=Strict или SameSite=Lax в куках помогает снизить риск CSRF, ограничивая отправку куки только тем запросам, которые идут с того же сайта.

  4. Аутентификация по токену: Вместо использования сессионных кук для аутентификации, можно рассмотреть аутентификацию на основе токенов, таких, как JSON Web Tokens (JWT). При этом токены должны быть хорошо защищены и передаваться по безопасному каналу (например, HTTPS).

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

Last modified: 10 July 2025