我希望限制用户可以访问的PHP功能。
例如,有一个对象$data
,用户想使用if
、for
和echo
。
显然,允许他编写PHP将是一个严重的漏洞。
有没有办法在沙盒中运行这个PHP代码,或者您推荐使用任何轻量级的PHP模板引擎?
phpinfo()
中,runkit已启用,但runkit_sandbox已禁用,可能是因为线程安全未启用。 - jantimon如果您熟悉Smarty,可以尝试使用Twig!
此外,Twig还有一个非常强大的扩展系统,允许您在模板语言中启用/禁用内置或自定义的标签、令牌解析器、节点等。这样一来,用户就能够拥有基本的逻辑(条件语句、“函数”(块)和迭代器),而不必诉诸于eval之类的邪恶方法。
PHP Fat-Free Framework有一个模板引擎,禁止使用PHP代码,并允许您定义可以在HTML模板中使用哪些函数。
还有一个真正的沙盒功能,使函数和包含文件独立于其他文件,即一个包含文件中的变量/函数不为其他文件所知,因此您可以拥有与另一个包含文件相同名称的函数。这对于(功能失调的)开发团队可能会有一些用处。