Я использую Zend_Reflection для генерации расширенного набора форматов ctags для использования с моим текстовым редактором.Проблема в том, что вам нужно include
любые файлы, которые вы хотите обработать.
Конструктор для Zend_Reflection_File
проверяет, включен ли файл, который вы хотите отразить, и, если нет, выдаетисключение:
// From Zend/Refection/File.php (94-97)
if (!$fileRealpath || !in_array($fileRealpath, get_included_files())) {
require_once 'Zend/Reflection/Exception.php';
throw new Zend_Reflection_Exception(
'File ' . $file . ' must be required before it can be reflected');
}
Я использую эту технику только в коде, которому доверяю , но я хотел бы обернуть все это в сценарий для использования другими.Меня беспокоит то, что любые включенные файлы могут вводить небезопасный код в текущую область.Например, я не хотел бы включать следующее:
<?php
// evil.php
shell_exec('rm -rf /');
Моей первой мыслью было использовать safe_mode
, но это не рекомендуется (а не как safe , как следует из названияпредлагаю, кажется).
Следующей идеей будет использование пользовательского файла php.ini и директивы disable_functions
, но (кроме кандидатов, перечисленных в документации safe_mode
), я не был уверен, что поймал всенеобходимые функции.
Наконец, мне интересно, есть ли способ заставить PHP работать в «песочнице» (своего рода) - я бы хотел получить информацию об Reflection без какого-либо включенного глобального кодавыполняется на всех.
Любые мысли приветствуются.ТИА.