Лабораторная работа 6. Аутентификация, авторизация, роли, сессии и безопасность
Аудиторная работа: 3 ак. ч.
Самостоятельная работа: 4 ак. ч.
Цель: реализовать защищенную многопользовательскую систему.
Symfony SecurityBundle предоставляет механизмы users, providers, firewalls, authentication и authorization; правила access_control используются для ограничения доступа к URL. [17]
Задание
-
Создайте сущность:
User
-
Поля:
id
email
password
roles
fullName
active
createdAt
-
email должен быть уникальным.
-
Настройте password hasher.
-
Реализуйте регистрацию пользователя.
-
Реализуйте вход.
-
Реализуйте выход.
-
Создайте роли:
ROLE_USER
ROLE_SALES
ROLE_MANAGER
ROLE_ADMIN
-
Настройте:
ROLE_ADMIN > ROLE_MANAGER > ROLE_SALES > ROLE_USER
-
Определите доступ:
ROLE_USER:
просмотр собственного профиля
ROLE_SALES:
просмотр клиентов
создание заказов
ROLE_MANAGER:
управление товарами
изменение статуса заказа
изменение скидок
ROLE_ADMIN:
управление пользователями
-
Настройте access_control.
-
Реализуйте проверку прав на уровне контроллера.
-
Создайте:
SalesOrderVoter
-
Voter должен принимать решения минимум для:
VIEW
EDIT
CHANGE_STATUS
DELETE
-
Реализуйте страницу:
/profile
-
Используйте Symfony Session.
-
В сессии храните:
последний выбранный период dashboard;
последний выбранный фильтр заказов.
-
Не храните в сессии пароль пользователя.
-
Добавьте CSRF-защиту к операциям удаления.
-
Создайте тестовых пользователей всех ролей.
-
Создайте functional tests:
guest -> /dashboard
ROLE_USER -> admin page
ROLE_SALES -> create order
ROLE_SALES -> delete user
ROLE_MANAGER -> edit product
ROLE_ADMIN -> user management
-
Проверяйте:
200
302
401/403
в зависимости от сценария.
-
Создайте:
docs/security/threat-model.md
-
Опишите минимум восемь угроз:
SQL injection
XSS
CSRF
broken access control
session theft
credential leakage
unsafe file access
information disclosure
-
Для каждой угрозы укажите:
актив;
угрозу;
возможный сценарий;
защитный механизм;
тест.
Обязательный запрос ИИ-агенту безопасности
Ты — application security engineer.
Проведи threat modeling Symfony-приложения BizFlow.
Приложение содержит:
регистрацию;
login/logout;
сессии;
клиентов;
заказы;
товары;
четыре роли.
Используй подход:
Asset -> Threat -> Attack scenario -> Mitigation -> Verification.
Отдельно проверь broken access control.
После threat model проанализируй security.yaml,
контроллеры и voters текущего проекта.
Обязательный запрос ИИ-тестировщику
Сгенерируй матрицу authorization tests.
Строки:
guest
ROLE_USER
ROLE_SALES
ROLE_MANAGER
ROLE_ADMIN
Столбцы:
dashboard
customers
create order
edit product
change status
delete order
user management
После построения матрицы создай functional tests для каждого запрещенного и разрешенного класса операций.
Самопроверка
php bin/console debug:config security
php bin/phpunit
Критерии приемки
[ ] регистрация работает
[ ] login работает
[ ] logout работает
[ ] пароль хранится только в виде hash
[ ] реализованы четыре роли
[ ] работает access_control
[ ] реализован Voter
[ ] используется Session
[ ] CSRF применяется к изменяющим операциям интерфейса
[ ] authorization tests проходят
[ ] создан threat model
[ ] имеется AI log
Symfony Security включает authentication, authorization, password hashing, user providers и firewalls; Symfony также предоставляет встроенные механизмы защиты форм и сессионных сценариев. [18]
