Middle Роутинг и контроллеры Обязательно

Фильтры: авторизация, CSRF, права

Действия контроллеров защищены цепочкой префильтров, куда по умолчанию входят проверка метода, авторизация (Authentication) и валидация токена (Csrf). Политика безопасности настраивается для конкретных действий через метод configureActions() или PHP-атрибуты, а разграничение ролей и прав доступа реализуется через кастомные префильтры на базе ActionFilter\Base.

Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.

Что нужно понимать

  • 1
    ActionFilter
  • 2
    Проверка прав доступа
  • 3
    Валидация входных данных
  • 4
    CSRF-защита

Материалы

Официальная документация

Проверь себя

Аудит нашёл, что действие 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: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти