В современном цифровом мире безопасность веб-приложений имеет первостепенное значение. Одной из распространенных угроз, с которыми сталкиваются разработчики, являются атаки межсайтовой подделки запросов (CSRF). Эти атаки используют доверие между браузером пользователя и веб-приложением, заставляя пользователя выполнить нежелательные действия с приложением. Чтобы смягчить атаки CSRF, одной из эффективных стратегий является использование токенов CSRF. В этой статье мы рассмотрим различные методы предотвращения атак CSRF с использованием разговорного языка и предоставим примеры кода для иллюстрации каждого метода.
Метод 1: шаблон токена синхронизатора
Шаблон токена синхронизатора — это широко используемый подход к защите CSRF. Он предполагает создание уникального токена для каждого сеанса пользователя и включение его в каждый запрос, изменяющий состояние на стороне сервера. Сервер проверяет подлинность токена перед обработкой запроса. Вот пример на PHP:
// Generating and storing CSRF token in the session
$csrfToken = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $csrfToken;
// Including the CSRF token in HTML forms
echo '<input type="hidden" name="csrf_token" value="' . $csrfToken . '">';
// Verifying the CSRF token on the server side
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF token mismatch!");
}
Метод 2: двойная отправка файлов cookie.
В этом методе используются два файла cookie: один содержит идентификатор сеанса, а другой — токен CSRF. Токен CSRF включается как в полезные данные запроса, так и в виде файла cookie. Сервер сравнивает значения, чтобы убедиться, что они совпадают. Вот упрощенный пример использования JavaScript:
// Setting the CSRF token as a cookie
document.cookie = "csrf_token=<csrf_token_value>; path=/";
// Including the CSRF token in request payload
fetch('/api/some-endpoint', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': getCookie('csrf_token')
},
body: JSON.stringify({ /* request data */ })
})
.then(response => response.json())
.then(data => {
// handle response
})
.catch(error => {
console.error('Error:', error);
});
Метод 3: файлы cookie SameSite.
Другой подход к защите CSRF — использование атрибута SameSite для файлов cookie. Установив для атрибута SameSite значение «Strict» или «Lax», вы можете запретить отправку файлов cookie в запросах между источниками, тем самым уменьшая атаки CSRF. Вот пример в Django (Python):
# Setting SameSite attribute for session cookies in Django settings.py
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = 'Strict'
CSRF-атаки могут иметь серьезные последствия для веб-приложений, ставя под угрозу пользовательские данные и целостность системы. Внедряя механизмы защиты CSRF, такие как шаблон токена синхронизатора, файлы cookie двойной отправки и файлы cookie SameSite, разработчики могут значительно снизить риск атак CSRF. Помните, что защита вашего веб-приложения от атак CSRF имеет решающее значение для поддержания доверия пользователей и защиты конфиденциальной информации.