Новое в Symfony 7.2: Опциональный секрет
Одним из наиболее известных параметров конфигурации Symfony является secret
, настраиваемый с помощью параметра framework.secret
или переменной APP_SECRET
в одном из файлов .env
, обрабатываемых Symfony. Независимо от того, как вы его настраиваете, это значение в конечном итоге становится параметром kernel.secret
в приложении.
Несмотря на своё название, эта опция совершенно не нужна в новых приложениях Symfony. Она актуальна только для опциональных функций, которые вы, возможно, никогда не будете использовать, например:
- Ссылки входа в систему без пароля;
- Remember Me для автоматического входа в систему на основе предыдущих сеансов;
- Rate Limiter для контроля частоты выполнения определённых действий;
- ESI для включения контента при использовании HTTP-кэширования.
Долгосрочная работа над проектом Symfony заключалась в том, чтобы позволить создавать новые приложения без необходимости вводить секрет. В Symfony 7.2 мы наконец-то достигли этой цели, и теперь новые приложения по умолчанию создаются с пустым секретом.
Чтобы достичь этого, мы внесли следующие изменения:
- PR #56840: Обновлена функция ссылок входа в систему, позволяющая определять значение секрета для подписи ссылок. Теперь она по умолчанию полагается на
kernel.secret
, но больше не требует его; - PR #56838: Исправлен аргумент
$secret
в функции Remember Me, так как этот секрет не используется с тех пор, как функция была переработана под новую систему аутентификации; - PR #56831: Удалено использование секрета в Rate Limiter для хэширования IP-адресов и имён пользователей, что делается для анонимизации данных;
- PR #57462: Модифицировано разрешение секретов в конфигурационных файлах, чтобы оно происходило лениво, что позволяет избежать проблем при обработке файлов;
- PR #56985: Если вы используете секреты для хранения конфиденциальной информации, необходимо настроить ключ дешифрования. В Symfony 7.2 этот ключ также будет служить в качестве
kernel.secret
, когда секрет необходим, но не определён.
Благодаря этим изменениям, если вы включите функцию, требующую секрет, но не настроите его, Symfony выбросит исключение с чётким сообщением, объясняющим, как решить проблему.
Наконец, чтобы улучшить DX (опыт разработчиков) при локальной разработке, Symfony автоматически генерирует значение секрета для локального окружения при создании нового приложения. Это значение хранится в файле .env.dev
, что является более безопасной практикой по сравнению с предыдущим подходом. Ранее секрет генерировался в основном файле .env
, который также используется в продакшне и потенциально может быть использован злоумышленниками из команды разработчиков.