\n```\n\n### Основные методы CSRF-защиты\n\nВ PHP Backend для защиты от CSRF чаще всего используются следующие подходы:\n\n1. **CSRF-токены (синхронизаторы)**:\n - Генерация уникального токена для каждой сессии пользователя.\n - Включение токена в формы (как скрытое поле) или в заголовки AJAX-запросов.\n - Проверка токена на сервере при обработке POST, PUT, DELETE и других изменяющих запросов.\n\n Пример реализации в PHP:\n\n```php\n// Генерация токена при старте сессии\nsession_start();\nif (empty($_SESSION['csrf_token'])) {\n $_SESSION['csrf_token'] = bin2hex(random_bytes(32));\n}\n\n// Вставка токена в форму\n?>\n
\n \">\n \n
\n 'Strict', 'secure' => true]);`.\n\n3. **Проверка заголовка Referer/Origin**:\n - Сервер может проверять, что запрос пришел с ожидаемого домена (например, с `bank.com`, а не с `evil.com`).\n - Однако этот метод не надежен, так как заголовки могут быть отключены в браузерах или подделаны.\n\n4. **Двойная отправка токенов**:\n - Токен хранится как в куках, так и в теле запроса (например, в форме). Сервер сверяет оба значения.\n - Этот подход удобен для одностраничных приложений (SPA), где токен можно отправлять в заголовках.\n\n### Практические рекомендации для PHP Backend\n\n- **Всегда используйте CSRF-токены для state-changing операций** (POST, PUT, PATCH, DELETE). Для GET-запросов защита обычно не требуется, так как они не должны изменять данные.\n- **Регенерируйте токен после каждой успешной проверки** или при смене состояния сессии, чтобы предотвратить replay-атаки.\n- **Комбинируйте методы**: например, CSRF-токены + SameSite cookies для усиленной защиты.\n- **Внедряйте защиту на уровне фреймворка**, если используете Laravel, Symfony и т.д. В них CSRF-защита встроена по умолчанию. В Laravel, например, токен добавляется через директиву `@csrf` в Blade-шаблонах.\n- **Тестируйте защиту** с помощью инструментов безопасности, таких как OWASP ZAP или Burp Suite.\n\n### Пример защиты в современных PHP-фреймворках\n\nВ Laravel CSRF-защита активирована глобально для всех маршрутов, кроме тех, что исключены явно. Middleware `VerifyCsrfToken` автоматически проверяет токен:\n\n```php\n// В форме Blade\n
\n @csrf\n \n
\n\n// Для AJAX-запросов токен можно включить в мета-тег\n\n// И отправить в заголовке X-CSRF-TOKEN\n```\n\nИтог: **CSRF-защита критически важна** для безопасности веб-приложений, так как предотвращает несанкционированные действия от лица пользователя. В PHP-разработке она достигается через токены, правильную конфигурацию кук и проверку источников запросов. Пренебрежение этими мерами может привести к финансовым потерям, утечке данных и репутационным рискам.","dateCreated":"2026-04-07T00:27:02.335866","upvoteCount":0,"author":{"@type":"Person","name":"deepseek-v3.2"}}}}
← Назад к вопросам

Что такое CSRF-защита?

1.7 Middle🔥 222 комментариев
#Безопасность

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое CSRF-защита?

CSRF (Cross-Site Request Forgery, или Межсайтовая Подделка Запроса) — это тип атаки на веб-приложения, при котором злоумышленник заставляет авторизованного пользователя выполнить нежелательные действия в доверенном веб-приложении без его ведома. Атака возможна, когда приложение не проверяет, действительно ли запрос был инициирован самим пользователем, а не сторонним сайтом. CSRF-защита — это комплекс мер, направленных на предотвращение таких атак, обычно путем добавления уникальных токенов в запросы.

Как работает CSRF-атака?

Представьте, что пользователь авторизован в банковском приложении на bank.com. Затем он посещает вредоносный сайт evil.com, который содержит скрытую форму или JavaScript-код, отправляющий запрос на bank.com для перевода денег. Браузер автоматически включает куки сессии с bank.com, и запрос выглядит легитимным для сервера, так как исходит от авторизованного пользователя. Пример вредоносного кода:

<!-- На сайте evil.com -->
<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="amount" value="1000">
  <input type="hidden" name="toAccount" value="attacker">
</form>
<script>document.forms[0].submit();</script>

Основные методы CSRF-защиты

В PHP Backend для защиты от CSRF чаще всего используются следующие подходы:

  1. CSRF-токены (синхронизаторы):

    • Генерация уникального токена для каждой сессии пользователя.
    • Включение токена в формы (как скрытое поле) или в заголовки AJAX-запросов.
    • Проверка токена на сервере при обработке POST, PUT, DELETE и других изменяющих запросов.

    Пример реализации в PHP:

// Генерация токена при старте сессии
session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Вставка токена в форму
?>
<form method="POST" action="/transfer">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <!-- Остальные поля формы -->
</form>
<?php

// Проверка токена на сервере
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF validation failed!');
    }
    // Обработка запроса
}
  1. SameSite cookies:

    • Использование атрибута SameSite для кук сессии. Установка SameSite=Strict или SameSite=Lax предотвращает отправку кук в cross-site запросах.
    • Пример установки в PHP: setcookie('session_id', $value, ['samesite' => 'Strict', 'secure' => true]);.
  2. Проверка заголовка Referer/Origin:

    • Сервер может проверять, что запрос пришел с ожидаемого домена (например, с bank.com, а не с evil.com).
    • Однако этот метод не надежен, так как заголовки могут быть отключены в браузерах или подделаны.
  3. Двойная отправка токенов:

    • Токен хранится как в куках, так и в теле запроса (например, в форме). Сервер сверяет оба значения.
    • Этот подход удобен для одностраничных приложений (SPA), где токен можно отправлять в заголовках.

Практические рекомендации для PHP Backend

  • Всегда используйте CSRF-токены для state-changing операций (POST, PUT, PATCH, DELETE). Для GET-запросов защита обычно не требуется, так как они не должны изменять данные.
  • Регенерируйте токен после каждой успешной проверки или при смене состояния сессии, чтобы предотвратить replay-атаки.
  • Комбинируйте методы: например, CSRF-токены + SameSite cookies для усиленной защиты.
  • Внедряйте защиту на уровне фреймворка, если используете Laravel, Symfony и т.д. В них CSRF-защита встроена по умолчанию. В Laravel, например, токен добавляется через директиву @csrf в Blade-шаблонах.
  • Тестируйте защиту с помощью инструментов безопасности, таких как OWASP ZAP или Burp Suite.

Пример защиты в современных PHP-фреймворках

В Laravel CSRF-защита активирована глобально для всех маршрутов, кроме тех, что исключены явно. Middleware VerifyCsrfToken автоматически проверяет токен:

// В форме Blade
<form method="POST" action="/profile">
    @csrf
    <input type="text" name="name">
</form>

// Для AJAX-запросов токен можно включить в мета-тег
<meta name="csrf-token" content="{{ csrf_token() }}">
// И отправить в заголовке X-CSRF-TOKEN

Итог: CSRF-защита критически важна для безопасности веб-приложений, так как предотвращает несанкционированные действия от лица пользователя. В PHP-разработке она достигается через токены, правильную конфигурацию кук и проверку источников запросов. Пренебрежение этими мерами может привести к финансовым потерям, утечке данных и репутационным рискам.

Что такое CSRF-защита? | PrepBro