沙箱用户';PHP代码

沙箱用户';PHP代码,php,security,sandbox,Php,Security,Sandbox,我想限制我的用户可以访问的PHP功能 例如,有一个对象$data,用户喜欢将if用于和echo 显然,允许他编写PHP将是一个严重的漏洞 有没有办法在沙箱中运行此PHP,或者您会推荐任何轻量级PHP模板引擎?尝试过Smarty PECL确实提供了沙箱功能,但对于您想做的事情来说,它可能有点过头了目前为止,我只知道一个 runkit扩展提供了 修改用户定义的常量 函数和用户定义的类。 它还提供了定制服务 超全局变量与可嵌入 通过沙箱的子口译员 更新: 我可以找到这两个关于zend和runkit的链

我想限制我的用户可以访问的PHP功能

例如,有一个对象
$data
,用户喜欢将
if
用于
echo

显然,允许他编写PHP将是一个严重的漏洞


有没有办法在沙箱中运行此PHP,或者您会推荐任何轻量级PHP模板引擎?

尝试过Smarty

PECL确实提供了沙箱功能,但对于您想做的事情来说,它可能有点过头了

目前为止,我只知道一个

runkit扩展提供了 修改用户定义的常量 函数和用户定义的类。 它还提供了定制服务 超全局变量与可嵌入 通过沙箱的子口译员

更新:

我可以找到这两个关于zend和runkit的链接,您应该看看:



按照smarty的思路,试一试

还有一个非常强大的工具,允许/禁止模板语言本身中的内置或自定义标记、令牌解析器、节点等。这样,用户就可以拥有基本的逻辑(条件语句、“函数”(块)和迭代器),而不必求助于eval

有一个模板引擎,禁止使用PHP代码,并允许您定义哪些函数可以在HTML模板中使用


还有一个真正的沙盒功能,使函数和包含文件独立于其他文件,即一个包含文件中的变量/函数不为其他人所知,因此您可以使用与另一个包含文件同名的函数。这可能对(功能失调的)开发团队有所帮助。

如果您没有自己的服务器,则可能没有runkit。但你所拥有的(可能)是!使用标记器,您可以查看给定的源代码,如果发现无效的标记,则中止。你可以为你的目的做同样的事情。PHP文档已经发布。如果您需要帮助决定允许或不允许哪些令牌,请这样说


欧元dit:显然我也建议使用。这是如此美好-并有沙箱

请参阅:Runkit要求启用线程安全,Zend要求禁用线程安全。。有没有办法使用Zend和Runkit?
Runkit_Sandbox类仅在PHP 5.1.0或经过特殊修补的PHP 5.0版本中可用,并且需要在my
phpinfo()中启用线程安全
runkit已启用,但runkit\u沙箱可能由于线程而被禁用safety@Ghommey:这就是我们目前的情况:(@Ghommey:如果你真的只想要可定制的输出,那么这就是你的选择。模板引擎比php-sandbox更容易维护。Twig有沙盒模板代码。这不如runkit沙盒好,但我不必重新安装php服务器。非常感谢!Twig将smarty从水里吹出来,它仍然处于活动开发中发展。