PHP 中的隔离?

Ind*_*ial 4 php security isolation

这是我考虑了一段时间的事情。
我正在创建一个应用程序,我的用户将在其中上传他们自己的自定义主题,这意味着任何具有基本 PHP/XSS/任何技能的人都会有一个很好的机会来引起很多头痛。

我想在某种沙盒封闭的环境中运行任何上传的文件,该环境只能访问我想要的东西(变量)而没有其他东西。

这会是一种很好的做法吗?怎么做?

roo*_*ook 5

为了安全地允许任意 html/javascript,每个用户必须有自己的子域。如果每个用户都有自己的子域,那么由于同源策略,用户的 JavaScript 将被限制在他们自己的沙箱中。如果您只想允许“安全 html”,那么htmlpurifer是一个选项,然后您可以使用 1 个域。

允许自定义 PHP 有点危险。“共享主机”提供商依赖suPHP,它强制 php 脚本以特定用户身份运行。这将要求每个用户在您的系统上拥有自己的帐户。这种防御方法已经存在一段时间了。它并不完美,但可以解决问题。

自定义主题的另一种可能解决方案是使用模板引擎,它可以防止模板获得对 PHP 的完全访问权限。一些流行的框架:

  1. smarty,它没有最好的安全记录,但你保持它最新你可能不会有问题。它需要配置为禁止本机 php
  2. twig是来自 Symfony 框架制造商的一个相对较新的引擎。这意味着它有一个不错的开发人员基础,并且因为它与 Symfony 一起发布,所以它也在野外进行了测试。Twig 不允许调用任何 PHP 函数,除非您专门为它们创建了一个 twig 函数/过滤器。


Nik*_*kiC 5

由于您不想授予用户访问 PHP 的权限,因此您应该使用支持沙箱的模板引擎。Twig就是一个突出的例子。