代码之家  ›  专栏  ›  技术社区  ›  jantimon

沙盒用户的PHP代码

  •  6
  • jantimon  · 技术社区  · 14 年前

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

    例如,有一个对象 $data 用户喜欢使用 if for echo .

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

    有没有任何方法可以在沙盒中运行这个PHP,或者您会推荐任何轻量级的PHP模板引擎?

    6 回复  |  直到 13 年前
        1
  •  8
  •   Community holdenweb    7 年前

    如果你没有自己的服务器,你可能没有runkit。但你所拥有的(可能)是 Tokenizer !使用记号赋予器,您可以查看给定的源代码,如果发现无效的记号,则中止。 Here an example how to validate an array using this . 为了你的目的你也可以这样做。PHP文档 a list of tokens . 如果您需要帮助决定允许或禁止哪些令牌,请这样说。

    _dit:显然我建议使用 Twig 也是。太好了-还有沙盒!

        2
  •  4
  •   Sarfraz    14 年前

    我唯一知道的是 runkit .

    runkit扩展提供了 修改常量,用户定义 函数和用户定义的类。 它还提供定制 超全局变量和可嵌入 通过沙盒进行翻译。

    更新:

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

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

        3
  •  4
  •   efritz    14 年前

    沿着聪明的路线,给予 twig 试一试!

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

        4
  •  2
  •   Homer6    14 年前
        5
  •  1
  •   Mark Baker    14 年前

    PECL runkit extension 确实提供了沙盒,但对于你想做的事情可能有点过分了。

        6
  •  1
  •   bcosca    14 年前

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

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