Самоучитель: PHP 8.5: инженерный практикум
Глава 12 из 22III. Веб-граница115 минут

Глава 12. Идентичность, пароль и право на конкретный объект

Успешный вход устанавливает личность, но не разрешает автоматически читать любую тренировку: право проверяется заново для выбранного объекта и действия.

После главы вы сможете
  • развести authentication и authorization
  • хешировать пароль штатным API
  • закрыть горизонтальный доступ

Три разных проверки

Authentication отвечает, кто перед нами. Session связывает следующие запросы с установленной личностью. Authorization решает, может ли этот субъект выполнить конкретное действие над конкретной тренировкой. Смешивание вопросов создаёт классическую ошибку: любой вошедший пользователь меняет id в URL и видит чужую запись.

Контроллер загружает минимальный контекст, use case применяет политику доступа, repository ограничивает запрос владельцем там, где это уместно. Скрытая кнопка не является проверкой: HTTP-запрос можно собрать вручную.

Маршрут доверия

Доступ к тренировкеКаждый запрос повторно связывает личность, объект и разрешённое действие.CredentialsverifySessionrotateWorkoutloadPolicyowner/coachActionallow/deny
Каждый запрос повторно связывает личность, объект и разрешённое действие.

Пароль не шифруют

password_hash создаёт одностороннее представление с солью и параметрами алгоритма, password_verify проверяет его, password_needs_rehash помогает обновлять настройки после успешного входа. Приложение не выбирает собственный быстрый хеш и не хранит обратимо зашифрованный пароль.

Ответ для неизвестного email и неправильного пароля формулируется одинаково. Ограничение частоты учитывает несколько сигналов и не превращается в простой способ навсегда заблокировать чужую учётную запись.

Восстановление доступа

Токен восстановления случайный, одноразовый, короткоживущий и хранится в базе в хешированном виде. Ссылка передаётся только по HTTPS. После изменения пароля связанные сеансы отзываются согласно политике, а событие попадает в безопасный аудит.

Не отвечайте, зарегистрирован ли email. Интерфейс может всегда сообщать, что инструкция отправлена, если адрес существует. Внутренний журнал различает исходы, но не содержит сырого токена.

Политика объекта

<?php
declare(strict_types=1);

function mayReadWorkout(int $actorId, int $ownerId, bool $isCoach): bool
{
    return $actorId === $ownerId || $isCoach;
}

echo mayReadWorkout(17, 17, false) ? 'allowed' : 'denied';

Лабораторная работа

Составьте сценарии регистрации, входа, чтения тренировки и восстановления пароля. Для каждого укажите ответы, ограничения частоты, ротацию сессии и отрицательный тест чужого id.

Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Перелинковка со справочником

Проверка актуальности

  • cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie