PHP как шаблонизатор хранится в Mysql - функции белого списка - PullRequest
0 голосов
/ 19 мая 2011

Пока я читал бесчисленные сообщения об использовании PHP в качестве движка шаблонов (используя буферизацию вывода), я все еще пытаюсь обосновать это.

Поскольку мне интересно, смогу ли я использовать PHP в качестве движка шаблонов для веб-приложения (пользователи смогут сами изменять макет) - я до сих пор не могу найти никакой информации относительно следующего:

  • Хранить шаблоны в базе данных MYSQL
  • Оцените их
  • НО включают только функции из белого списка (чтобы дать им доступ только к ограниченному набору функций - while, foreach и т. Д.) *

Кто-нибудь ищет такое же решение, но может предложить немного больше информации? Это было бы неплохо.

Ответы [ 3 ]

2 голосов
/ 19 мая 2011

Если вы не можете доверять пользователю, редактирующему шаблон, вам лучше использовать отдельный язык шаблонов.

Обратите внимание, что многие языки шаблонов, такие как Smarty, также предоставляют функции выполнения кода. Возможно, вам придется отключить те, в конфигурации двигателя.

Отключение всех потенциально опасных функций в PHP - очень сложная задача, которую легко испортить. Смотрите Эксплуатируемые функции PHP

1 голос
/ 19 мая 2011

PHP не подходит в качестве движка шаблонов для ваших целей. Для этого вы должны использовать соответствующий шаблонизатор с поддержкой песочницы: Twig .

0 голосов
/ 19 мая 2011

Это, вероятно, довольно сложная (но интересная, если вы в теме) задача, потому что она включает в себя создание небольшого парсера PHP, который может безошибочно идентифицировать любой вызов функции или вызов метода (потому что, если вы пропустите один, вы ' снова ввернут / взломан / ...), а затем проверьте, все ли токены идентификаторов совпадающих функций находятся в вашем белом списке, и в противном случае откажитесь в оценке. Для генерации вашего парсера вы можете проверить PHP_ParserGenerator , который, к сожалению, больше не поддерживается, или lemonPHP / JLexPHP , который может быть более актуальным, но вам нужно использовать Java для генерации парсера.

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

Среди популярных шаблонных движков PHP:

Больше можно найти здесь и здесь

...