Настройка защиты от CSRF (Cross-Site Request Forgery) на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка защиты от CSRF (Cross-Site Request Forgery) на сайте
Средняя
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка защиты от CSRF (Cross-Site Request Forgery) на сайте

CSRF — атака, при которой злоумышленник заставляет авторизованного пользователя непреднамеренно выполнить действие на целевом сайте. Классический пример: пользователь залогинен в банк, открывает вредоносную страницу — та отправляет POST-запрос на перевод денег от его имени.

Механизм атаки

Браузер автоматически прикрепляет cookies к любому запросу на домен, независимо от того, откуда инициирован запрос. Если сайт использует сессионную аутентификацию через cookies, злоумышленник может создать форму или XHR, которые выполнят действие от имени жертвы.

Защита через CSRF-токены

Классический и наиболее надёжный подход: для каждой сессии генерируется уникальный токен, который встраивается в формы и проверяется при каждом POST/PUT/DELETE запросе.

Laravel (встроенная защита):

// Middleware VerifyCsrfToken подключён глобально в app/Http/Kernel.php
// В Blade-шаблонах:
<form method="POST" action="/profile">
    @csrf
    {{-- Генерирует: <input type="hidden" name="_token" value="..."> --}}
</form>

Для AJAX-запросов токен передаётся через мета-тег:

<meta name="csrf-token" content="{{ csrf_token() }}">
// Axios — настройка один раз глобально
axios.defaults.headers.common['X-CSRF-TOKEN'] =
    document.querySelector('meta[name="csrf-token"]').content;

// Fetch
const response = await fetch('/api/data', {
    method: 'POST',
    headers: {
        'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
});

SameSite Cookie

Современный и элегантный способ защиты — флаг SameSite в cookies:

// Laravel config/session.php
'same_site' => 'lax', // или 'strict'
Значение Поведение
Strict Cookie не отправляется ни при каких cross-site запросах
Lax Cookie не отправляется при POST cross-site, но отправляется при переходе по ссылке
None Cookie отправляется везде (требует Secure)

Lax — хороший баланс для большинства сайтов. Strict ломает переходы с внешних ссылок (пользователь кликает по ссылке на сайт из письма и оказывается неавторизованным).

Double Submit Cookie

Для API без сессий (SPA + JWT): токен хранится в cookie и дублируется в заголовке. Сервер сверяет их.

// Клиент читает cookie (доступен через JS, без HttpOnly)
const csrfToken = document.cookie
    .split('; ')
    .find(row => row.startsWith('XSRF-TOKEN='))
    ?.split('=')[1];

axios.defaults.headers.common['X-XSRF-TOKEN'] = csrfToken;

Laravel Sanctum использует именно этот паттерн для SPA-аутентификации.

Исключения из CSRF-защиты

Некоторые маршруты намеренно исключают из CSRF-проверки (webhooks от платёжных систем, Stripe events и т.д.):

// app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
    'stripe/*',
    'webhooks/github',
];

Для excluded-маршрутов верификация подлинности выполняется через HMAC-подпись или Bearer-токен.

Проверка Origin/Referer

Дополнительный слой: проверка заголовка Origin или Referer при мутирующих запросах. Если Origin не совпадает с доменом сервера — запрос отклоняется.

// Пример middleware
public function handle($request, Closure $next)
{
    $origin = $request->header('Origin');
    $allowed = ['https://example.com', 'https://app.example.com'];

    if ($request->isMethod('POST') && !in_array($origin, $allowed)) {
        abort(403, 'Forbidden origin');
    }

    return $next($request);
}

Тестирование CSRF-защиты

  1. Создать HTML-страницу на другом домене с формой, отправляющей POST на защищаемый URL
  2. Авторизоваться на целевом сайте
  3. Перейти на вредоносную страницу и попытаться отправить форму
  4. Сервер должен вернуть 419 (Laravel) или 403

Срок реализации

  • Базовая настройка CSRF-защиты в Laravel/Django/Rails: 1 день
  • Интеграция с существующим SPA (Sanctum/XSRF cookie): 1–2 дня
  • Аудит и исправление уязвимых форм в legacy-проекте: 2–5 дней