Фильтры: авторизация, CSRF, права
Действия контроллеров защищены цепочкой префильтров, куда по умолчанию входят проверка метода, авторизация (Authentication) и валидация токена (Csrf). Политика безопасности настраивается для конкретных действий через метод configureActions() или PHP-атрибуты, а разграничение ролей и прав доступа реализуется через кастомные префильтры на базе ActionFilter\Base.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
ActionFilter
-
2
Проверка прав доступа
-
3
Валидация входных данных
-
4
CSRF-защита
Материалы
Официальная документация
-
Валидация Новая дока
-
CSRF и SSRF Новая дока
Проверь себя
Аудит нашёл, что действие delete доступно гостю, хотя разработчик снимал авторизацию только с одного публичного действия. Как так вышло?
Он переопределил getDefaultPreFilters() пустым массивом, а это умолчание для всех действий контроллера. Снимать фильтр нужно точечно: -prefilters с Authentication::class в configureActions() или атрибут DisablePrefilters у одного метода.
Для POST-действия явно задан prefilters с одним HttpMethod, без Csrf, но ядро всё равно требует sessid. Почему?
Controller::buildFilters() добавляет Csrf сам, если среди фильтров есть HttpMethod с POST и запрос пришёл POST-ом, а Csrf в списке нет. Отключить его можно только явно через -prefilters с Csrf::class — и только для действий, которые не меняют данные.
Заказчик хочет, чтобы действие вызывали только менеджеры. Какой стандартный фильтр это делает?
Никакой: встроенные фильтры проверяют авторизацию, метод, CSRF, scope и content-type, но не права. Пишется свой префильтр на ActionFilter Base с onBeforeAction(), который проверяет права и возвращает EventResult::ERROR с ошибкой.
Чем валидация через DTO с атрибутами лучше проверок в начале действия?
Она выполняется до вызова действия и возвращает сразу все ошибки полей, а не первую. DTO регистрируется в getAutoWiredParameters() через ValidationParameter, и действие получает уже проверенный объект.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить