Можно ли развернуть Symfony с горячим, но доступным только для чтения кешем?

Symfony2 требует, чтобы его кеш был доступен для записи процессом, под которым он работает, даже в продакшене. Однако злонамеренное изменение этого кеша может привести к выполнению произвольного кода и/или произвольным изменениям в приложении (и его случайное повреждение может привести к сбою программного обеспечения).

Конечно, это хорошая практика — применять ограничения в ОС, которые предотвращают эскалацию любой компрометации общедоступных систем до таких произвольных степеней?

Одна мысль состоит в том, чтобы развернуть горячий, но доступный только для чтения кеш исполняемого кода (который в любом случае является статическим), чтобы производственная система не могла впоследствии изменить его; динамические данные, например. из Doctrine, по-прежнему можно кэшировать где-нибудь в доступном для записи месте, но он никогда не будет оцениваться для выполнения кода.

Это поддерживаемая конфигурация? Если да, то как? Или я слишком параноик?


person eggyal    schedule 17.08.2015    source источник


Ответы (2)


Я не думаю, что Symfony поддерживает это, поскольку на GitHub все еще есть открытый элемент, посвященный этой самой проблеме:

https://github.com/symfony/symfony/issues/23354

person Sil    schedule 15.07.2019

Я тоже работал над этим. Это становится намного более осуществимым в Symfony 3.3, потому что файловый кеш, наконец, поддерживает относительные пути к файлам и динамические переменные среды (в контейнере).

Попробуйте следующее и посмотрите, работает ли это для вас:

# locally
$ app/console cache:clear --no-debug --env=dev
$ app/console cache:warmup --no-debug --env=dev

# for production
$ app/console cache:clear --no-debug --env=prod
$ app/console cache:warmup --no-debug --env=prod
person Brent Shaffer    schedule 08.06.2017