0Pricing
PHP Academy · Урок

Защита от CSRF

Создавайте и проверяйте токены CSRF в формах, чтобы предотвращать поддельные запросы

«Защита от CSRF» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое CSRF?

Межсайтовая подделка запроса (CSRF) заставляет аутентифицированных пользователей выполнять нежелательные действия. Вредоносная страница отправляет поддельный запрос на ваш сайт, используя активную сессию жертвы.

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

Сценарий: Алиса вошла в систему на bank.com. Она посещает malicious.com, где есть скрытая форма, автоматически отправляющая запрос на перевод в bank.com с использованием её файла cookie сессии.

Токены CSRF

Защита заключается в секретном токене для каждой сессии, встроенном в каждую форму. Сервер проверяет токен в запросах POST/PUT/PATCH/DELETE, а поддельный запрос из другого источника не может прочитать этот токен.

@csrf в Laravel Blade

Добавляйте директиву @csrf в каждую HTML-форму, которая изменяет данные.

<form method="POST" action="/transfer">
    @csrf
    <input name="amount" type="number">
    <button>Transfer</button>
</form>

Промежуточное ПО CSRF

Промежуточное ПО Laravel VerifyCsrfToken проверяет заголовок X-CSRF-TOKEN или поле _token во всех запросах, кроме GET, в группе промежуточного ПО web.

CSRF для AJAX

Для запросов AJAX считывайте токен из метатега и отправляйте его в заголовке.

// In the HTML head:
<meta name="csrf-token" content="{{ csrf_token() }}">

// In JavaScript (Axios):
axios.defaults.headers.common["X-CSRF-TOKEN"] =
    document.querySelector("meta[name=csrf-token]").content;

Исключение маршрутов

Маршруты API, использующие токены Sanctum, обычно исключаются из защиты CSRF, поскольку вместо файлов cookie они используют аутентификацию на основе токенов.

<?php
// In VerifyCsrfToken $except:
protected $except = [
    "api/*",
    "webhooks/*",
];

Атрибут SameSite файла cookie

Установка SameSite=Strict или Lax для файла cookie сессии обеспечивает дополнительный уровень защиты от CSRF в современных браузерах.

Шаблон двойной отправки файла cookie

Альтернативный способ защиты API от CSRF: отправляйте токен одновременно как файл cookie и как заголовок запроса. Сервер проверяет их совпадение, а межсайтовые запросы не могут прочитать файлы cookie.

CSRF в контексте API

REST API, использующие для аутентификации токены Bearer (Sanctum, JWT), не уязвимы для CSRF, поскольку токены хранятся в localStorage и не отправляются браузером автоматически.

Тестирование CSRF

Вспомогательные средства тестирования Laravel автоматически добавляют токены CSRF. Вы также можете проверить, что незащищённые запросы POST отклоняются.

<?php
// With token:
$this->post("/transfer", ["_token" => csrf_token(), "amount" => 100]);
// Simulating CSRF attack (no token):
$this->withoutMiddleware(VerifyCsrfToken::class)->post("/transfer", [...]);

Итоги

Для защиты от CSRF в каждой форме, изменяющей состояние, требуется скрытый токен. Laravel обрабатывает это автоматически с помощью @csrf. Для AJAX добавляйте токен в заголовок HTTP. Маршруты API, использующие токены Bearer, не подвержены этой угрозе.

Быстрая проверка

Как добавить защиту от CSRF в форму Laravel Blade?

Часто задаваемые вопросы

Урок «Защита от CSRF» бесплатный?

Да — полный текст урока «Защита от CSRF» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Защита от CSRF»?

Создавайте и проверяйте токены CSRF в формах, чтобы предотвращать поддельные запросы Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Защита от CSRF»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Защита от межсайтового скриптинга (XSS)
  2. SQL-инъекции и параметризованные запросы
  3. Защита от CSRF
  4. Безопасное хранение паролей
← Назад к PHP Academy