
Эта статьяговорит, что имеяopcache_get_status()
включено — это риск безопасности. Чтобы отключить, нужно настроить opcache.restrict_api
, но я не смог найти пример, как это сделать.
Этот человекимел ограничение, действующее при настройке как opcache.restrict_api=/restricted
, что дает мне подсказку, что это должен быть путь.
Я начал с создания тестового скрипта с opcache_get_status()
вызовом, и получил вывод множества PHP-скриптов на этой системе, подтверждающий отсутствие ограничений. Затем я отредактировал свой /etc/php/7.3/fpm/php.ini
на have opcache.restrict_api=/dev/null
, и тот же самый вызов теперь возвращается bool(false)
- я полагаю, что ограничение включено.
Моя цель — полностью запретить opcache_get_status()
и т. п., а «разрешая» скрипты в /dev/null
, я по сути делаю невозможным их использование, поскольку вы не можете создать там файл.
- Верна ли эта логика?
- Может быть, мне следует использовать какой-то другой путь?
- Есть ли способ включить ограничение напрямую, не возясь с поддельными путями?
Спасибо
решение1
Глядя на исходный кодext/opcache/zend_accelerator_module.c
- Чтобы информация «просочилась»,
validate_api_restriction()
необходимо вернутьtrue
. - Вэта функция сама по себе, это занимает
SG(request_info).path_translated
(что, по-видимому,равноSCRIPT_FILENAME
) исопоставляет его сrestrict_api
, сравниваяпервые несколько символовиз двух значений. - Так как первый символ
path_translated
akaSCRIPT_FILENAME
— это слэш,opcache.restrict_api=1
он не будет соответствовать ему (/
!=1
), и поэтому выглядит безопасным для использования
Такжевот еще кто-то используетopcache.restrict_api=1
слишком.
Пожалуйста, поправьте меня, если я где-то ошибаюсь! До тех пор я думаю, что это в значительной степени отвечает на мой вопрос.