Если вы когда-либо сталкивались с неприятным сообщением об ошибке «Несоответствие токена CSRF», то вы, вероятно, знакомы с концепцией атак с подделкой межсайтовых запросов (CSRF). Атаки CSRF используют доверие между веб-сайтом и его аутентифицированными пользователями, позволяя злоумышленникам выполнять несанкционированные действия от имени ничего не подозревающих пользователей. В этой статье мы углубимся в атаки CSRF, объясним важность токенов CSRF для защиты от них и рассмотрим различные методы защиты вашего сайта от уязвимостей CSRF.
Понимание CSRF-атак:
Проще говоря, CSRF-атака происходит, когда злоумышленник обманом заставляет аутентифицированного пользователя непреднамеренно выполнить действие на целевом веб-сайте без его согласия. Это может иметь серьезные последствия, такие как несанкционированные переводы средств, изменение профиля или даже непреднамеренное удаление данных. Чтобы снизить эти риски, разработчики используют токены CSRF в качестве важного механизма защиты.
Токены CSRF 101:
Токен CSRF — это уникальное и непредсказуемое значение, генерируемое сервером и связанное с сеансом пользователя. Он действует как секретный «пароль», который должен быть включен в каждый запрос на изменение состояния, отправляемый на сервер. Проверяя действительность токена, сервер гарантирует, что запрос исходит от самого веб-сайта, а не из внешнего источника. Всякий раз, когда происходит несоответствие токена CSRF, это означает, что токен, включенный в запрос, не соответствует ожидаемому сервером.
Методы защиты от CSRF-атак:
-
Реализация файлов cookie двойной отправки.
Один из самых простых способов защиты от атак CSRF — использование файлов cookie двойной отправки. В этом методе сервер устанавливает файл cookie, содержащий значение токена CSRF, при этом тот же токен также включается в полезные данные или заголовки запроса. При получении запроса сервер сравнивает токен в файле cookie с токеном в запросе, чтобы проверить их согласованность.Пример фрагмента кода (на PHP):
<?php // Setting CSRF token in cookie setcookie('csrf_token', $csrfTokenValue, time() + 86400, '/', 'example.com', true, true); // Including CSRF token in request payload or headers $csrfToken = $_COOKIE['csrf_token'] ?? ''; // ... -
Шаблон токена синхронизатора.
Шаблон токена синхронизатора включает в себя встраивание токена CSRF в скрытое поле формы. Когда пользователь отправляет форму, сервер проверяет, соответствует ли токен тому, который хранится в сеансе. Этот метод гарантирует, что действительными будут считаться только запросы, исходящие с самого веб-сайта.Пример фрагмента кода (в формате HTML):
<form action="/process" method="POST"> <input type="hidden" name="csrf_token" value="{{ csrf_token }}"> <!-- Other form fields --> <button type="submit">Submit</button> </form> -
Токен в настраиваемом заголовке запроса.
Вместо того, чтобы включать токен CSRF в поля формы или файлы cookie, его можно отправить в настраиваемом заголовке. Этот подход особенно полезен при выполнении запросов AJAX или при использовании платформ, обрабатывающих запросы через специальные заголовки.Пример фрагмента кода (в JavaScript с использованием jQuery):
$.ajax({ url: '/process', type: 'POST', headers: { 'X-CSRF-Token': 'csrf_token_value', }, // ... }); -
Атрибут SameSite:
Атрибут SameSite можно установить для файлов cookie, чтобы ограничить их использование только запросами на один и тот же сайт. Установив для атрибута SameSite значение «Строгий» или «Слабый», вы можете запретить отправку файлов cookie с межсайтовыми запросами, тем самым уменьшая атаки CSRF.Пример фрагмента кода (на PHP):
setcookie('session_cookie', $sessionValue, [ 'expires' => time() + 86400, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax', ]);
Защита вашего веб-сайта от атак CSRF имеет решающее значение для обеспечения безопасности и доверия ваших пользователей. Внедряя надежные меры защиты от CSRF, такие как файлы cookie двойной отправки, шаблон токена синхронизатора, настраиваемые заголовки запросов и использование атрибута SameSite, вы можете значительно снизить риск стать жертвой уязвимостей CSRF. Будьте активны, обеспечивайте безопасность своего веб-сайта и защищайте данные своих пользователей от несанкционированных манипуляций.