Новое в Symfony 7.2: Опциональный секрет

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, который также используется в продакшне и потенциально может быть использован злоумышленниками из команды разработчиков.

Комментарии


Дополнительные материалы

Предыдущая Статья

Переходите на сторону light-dark()

Следующая Статья

Руководство по установке и обновлению PHP 8.4 для Ubuntu и Debian