PHP-код пользователей в песочнице - PullRequest
6 голосов
/ 23 июля 2010

Я хочу ограничить доступ к функциям PHP для моих пользователей.

Например, есть объект $data, и пользователь любит использовать if for и echo.

Очевидно, что позволить ему писать PHP было бы серьезной уязвимостью.

Есть ли способ запустить этот PHP в песочнице или вы бы порекомендовали какой-нибудь легкий шаблонный движок PHP?

Ответы [ 6 ]

8 голосов
/ 30 июля 2010

Если у вас нет собственного сервера, возможно, у вас нет runkit. Но то, что у вас есть (вероятно), это Tokenizer ! Используя Tokenizer, вы можете просмотреть данный исходный код и прервать работу, если найдете недействительный токен. Вот пример, как проверить массив с помощью этого . Вы можете сделать то же самое для вашей цели. В документации PHP есть список токенов . Если вам нужна помощь в определении того, какие токены разрешать или запрещать, скажите, пожалуйста.

€ dit: И, очевидно, я рекомендую использовать Twig тоже. Это так приятно - и есть песочница!

4 голосов
/ 26 июля 2010

По умному пути, попробуйте веточку !

Существует также очень надежная система расширений , которая позволяет разрешать / запрещать встроенные или пользовательские теги, парсеры токенов, узлы и т. Д. В самом языке шаблонов. Таким образом, пользователи могут иметь базовую логику (условные операторы, «функции» (блоки) и итераторы), не прибегая к злу eval.

4 голосов
/ 26 июля 2010

На данный момент я знаю только одно: runkit .

Расширение runkit предоставляет средства для изменения констант, пользовательских функций и пользовательских классов.Он также предоставляет настраиваемые суперглобальные переменные и встраиваемые суб-интерпретаторы через песочницу.

Обновление:

Я мог бы найти эти две ссылки, касающиеся Zend и Runkit, которые вам следуетвзгляните на:

http://framework.zend.com/wiki/display/ZFPROP/Zend_Http_Server+-+Mat+Scales
http://www.dunfy.me.uk/?p=38

2 голосов
/ 23 июля 2010

пробовал Smarty?http://www.smarty.net/

1 голос
/ 30 июля 2010

PHP Fat-Free Framework имеет механизм шаблонов, который запрещает использование кода PHP и позволяет вам определять, какие функции могут использоваться внутри шаблонов HTML.

Существует также настоящая песочницаФункция, которая делает функции и включаемые файлы независимыми от других, то есть переменные / функции в одном включаемом файле не известны другим, поэтому вы можете иметь функцию с тем же именем, что и другой включаемый файл.Это может быть полезно для (неблагополучных) групп разработчиков.

1 голос
/ 23 июля 2010

Расширение PECL runkit обеспечивает песочницу, но, возможно, это немного излишне для того, что вы хотите сделать

...