我想限制用户有权访问的PHP功能。
例如,有一个对象$data
,用户喜欢使用if
for
和echo
。
显然允许他编写PHP将是一个严重的漏洞。
有没有办法在沙盒中运行这个PHP,或者你会推荐任何轻量级的PHP模板引擎吗?
答案 0 :(得分:8)
如果您没有自己的服务器,则可能没有runkit。但你所拥有的(可能)是Tokenizer!使用Tokenizer,您可以查看给定的源代码并在发现无效令牌时中止。 Here an example how to validate an array using this。你可以为你的目的做同样的事情。 PHP文档有a list of tokens。如果您需要帮助决定允许或禁止哪些令牌,请说明。
€dit:显然我也建议使用Twig。它真是太棒了 - 而且还有沙盒!
答案 1 :(得分:4)
答案 2 :(得分:4)
答案 3 :(得分:2)
试过Smarty? http://www.smarty.net/
答案 4 :(得分:1)
PECL runkit extension确实提供了沙盒,但对于你想做的事情可能有点过分
答案 5 :(得分:1)
PHP Fat-Free Framework有一个模板引擎,禁止使用PHP代码,并允许您定义哪些函数可以在HTML模板中使用。
还有一个真正的沙盒功能,它使函数和包含文件独立于其他文件,即一个包含文件中的变量/函数不为其他人所知,因此您可以使用与另一个包含文件具有相同名称的函数。这可能对(功能失调的)开发团队有用。