Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Senior Filament

Що Filament захищає сам, а що лишається відповідальністю розробника?

Filament бере на себе багато перевірок, але не всі. Корисно чітко знати межу.

Що Filament робить сам:

  • доступ до панелі - через canAccessPanel() (на продакшені обов'язковий);
  • політики ресурсів - viewAny, create, update, delete перевіряються для сторінок і вбудованих дій;
  • приховані й вимкнені дії не можна викликати навіть підробленим запитом: дія, для якої visible() повернув false, вважається вимкненою й не виконується на сервері;
  • вимкнені поля (disabled()) не зберігаються, якщо явно не дозволити saved();
  • Select за замовчуванням перевіряє, що обране значення є серед дозволених опцій;
  • HTML у TextColumn/TextEntry з html() чи markdown() санітизується.

Що лишається на вас:

  • власний Blade. Якщо виводите HTML з RichEditor у своєму шаблоні - санітизуйте (str($html)->sanitizeHtml()) або використовуйте RichContentRenderer. Санітайзер Filament пропускає атрибути style, тож для недовіреного вмісту може знадобитися суворіший;
  • імпорт і експорт не перевіряють політики для кожного запису. Користувач з доступом до експорту отримає все, що поверне запит, - обмежуйте його через modifyQueryUsing();
  • фільтри списків - не межа безпеки. Звуження опцій у модальній таблиці (tableSelect) лише відображення; дозволені записи задають запитом на кшталт recordSelectOptionsQuery();
  • unique() не враховує глобальні скоупи й тенантів - для мультиорендних даних є scopedUnique();
  • файли. preserveFilenames() на дисках local/public відкриває шлях до завантаження виконуваних файлів - краще випадкові імена й storeFileNamesIn();
  • CSV-формули. Значення, що починаються з =, +, -, @, у файлах експорту чи «невдалих рядків» імпорту Excel може виконати як формулу.

Окремий нюанс - middleware. Панель збирає власний стек middleware і не використовує групу web застосунку. Middleware, додане в web (наприклад, заголовки CSP), на маршрутах панелі не спрацює - його треба реєструвати в $panel->middleware([...]).

Практичний підсумок: політика на кожну модель ресурсу, canAccessPanel() з перевіркою конкретної панелі, і обережність скрізь, де дані виходять за межі панелі: свої шаблони, файли, експорт.

Докладніше в документації: Безпека

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання