Включение 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 тоже.
Пожалуйста, поправьте меня, если я где-то ошибаюсь! А пока я чувствую, что это в значительной степени отвечает на мой вопрос.