Включение opcache.restrict_api из соображений безопасности
В этой статье говорится, что имея opcache_get_status()
enabled представляет собой угрозу безопасности. Чтобы выключить его, нужно настроить
opcache.restrict_api
, но я не нашел примера, как это сделать.
Этот человек имел ограничение при настройке как
opcache.restrict_api=/restricted
, что дает мне понять, что это должен быть путь.
Я начал с создания тестового скрипта с
opcache_get_status()
вызов, и я получил вывод множества сценариев PHP в этой системе, подтверждающих отсутствие ограничений. Затем я отредактировал свой
/etc/php/7.3/fpm/php.ini
иметь
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
он жеSCRIPT_FILENAME
косая черта,opcache.restrict_api=1
не будет соответствовать (/
знак равно1
), и поэтому выглядит безопасным для использования
Также здесь кто-то еще использует
opcache.restrict_api=1
тоже.
Пожалуйста, поправьте меня, если я где-то ошибаюсь! А пока я чувствую, что это в значительной степени отвечает на мой вопрос.