0Pricing
PHP Academy · Урок

Лучшие практики защиты сессий

Предотвращайте фиксацию и перехват сессий с помощью регенерации и флагов

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

Атака фиксации сессии

Злоумышленник заставляет пользователя использовать идентификатор сессии, который уже известен злоумышленнику, а затем перехватывает сессию после входа в систему.

Предотвращение фиксации: session_regenerate_id()

После любого изменения привилегий (входа в систему или изменения роли) создайте новый идентификатор сессии, сохранив существующие данные сессии.

<?php
session_start();
// After successful login:
session_regenerate_id(true); // true = delete old session file
$_SESSION["user_id"] = $userId;

Перехват сеанса

Злоумышленник крадёт ID сеанса посредством перехвата сетевого трафика, XSS или утечки журналов. Для защиты используйте HTTPS, файлы cookie с флагом HttpOnly и снятие отпечатка.

session.cookie_httponly

Запретите JavaScript читать файл cookie сеанса — это предотвращает большинство случаев кражи сеанса через XSS.

<?php
ini_set("session.cookie_httponly", 1);
session_start();

session.cookie_secure

Пометьте файл cookie сеанса как защищённый, чтобы он отправлялся только через HTTPS.

<?php
ini_set("session.cookie_secure", 1);
session_start();

session.cookie_samesite

Установите SameSite в строгий или ослабленный режим, чтобы предотвратить атаки CSRF с использованием файла cookie сеанса.

<?php
ini_set("session.cookie_samesite", "Strict");
session_start();

Привязка к агенту пользователя

Сохраните User-Agent в сеансе при входе и проверяйте его при каждом запросе, чтобы обнаруживать перехват сеанса.

<?php
if (!isset($_SESSION["ua"])) {
    $_SESSION["ua"] = $_SERVER["HTTP_USER_AGENT"];
} elseif ($_SESSION["ua"] !== $_SERVER["HTTP_USER_AGENT"]) {
    session_destroy();
    die("Session invalid");
}

Ограничение времени сеанса

Реализуйте ограничение времени на основе активности — автоматически завершайте сеанс неактивных пользователей.

<?php
$timeout = 1800;
if (isset($_SESSION["last_active"]) &&
    time() - $_SESSION["last_active"] > $timeout) {
    session_destroy();
    header("Location: /login");
    exit;
}
$_SESSION["last_active"] = time();

session.use_strict_mode

Включите строгий режим, чтобы сервер отклонял неизвестные ID сеансов — это предотвращает фиксацию сеанса через внедрение URL.

<?php
ini_set("session.use_strict_mode", 1);
session_start();

Пользовательские обработчики сеансов

Хранение сеансов в Redis или базе данных позволяет централизованно аннулировать все сеансы пользователя и отслеживать активные сеансы.

Периодическая регенерация

Даже во время длительного сеанса с выполненной аутентификацией регенерируйте ID сеанса каждые 15–30 минут, чтобы снизить риск кражи токена.

Итоги

Всегда используйте HTTPS, устанавливайте флаги HttpOnly+Secure+SameSite, вызывайте session_regenerate_id(true) после входа, реализуйте ограничение времени бездействия и используйте строгий режим.

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

Что делает session_regenerate_id(true)?

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

Урок «Лучшие практики защиты сессий» бесплатный?

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

Чему я научусь в уроке «Лучшие практики защиты сессий»?

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

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

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

Сколько времени занимает урок «Лучшие практики защиты сессий»?

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

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

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

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

  1. Запуск и использование сессий
  2. Лучшие практики защиты сессий
  3. Установка и чтение файлов cookie
  4. Безопасность cookie: флаги HttpOnly и Secure
← Назад к PHP Academy