2011-02-28 58 views
2

我正在构建一个系统,让不同的用户可以上传自定义的php模块。该系统基于用PHP编写并在Linux上部署的自定义MVC框架。 当用户登录时,他的模块将由系统内核加载。系统核心在所有模块之间共享。PHP MVC Sandboxing

我的问题是,如何限制用户模块与核心混乱。例如。取消链接文件等。我可以通过文件权限阻止他们这样做吗?

回答

0

希望系统的每个用户在您的服务器上都有不同的用户帐户。如果他们不这样做,让他们避免删除彼此的数据是非常困难的。

我假设你正在研究一些unix服务器的风格。

  • 创建一个拥有MVC系统核心的用户。这是管理员用户。我会打电话给这个用户mvc-admin
  • 创建一个允许访问系统核心的组。我会在这个答案中称这个组为g-mvc-access
  • chown -R mvc-admin:g-mvc-access /path/to/mvc-system-root。现在这些文件全部由管理员用户所有,并且在访问组中
  • 做了chmod -R g+r-w /path/to/mvc-system-root。现在,该组可以读取但不写入MVC系统根目录下的所有文件。
  • 将所有用户帐户添加到组g-mvc-access
+0

这看起来像一个很好的解决方案,我会测试它,谢谢:) – SlasherZ 2011-03-01 10:14:27

-1

您可以将脚本上传到运行“安全”php的第二台服务器。

然后,只需通过disable_functions选项禁用危险的函数指令:

http://www.webhostgear.com/319.html

+0

问题是系统核心加载模块并执行它们。因此,将脚本放到另一台服务器上是不可取的,因为它们需要包含在内核中。 – SlasherZ 2011-02-28 13:23:41

+0

不知道这个限制。一个简单的(非常完美的)方法:在存储php文件之前使用搜索和替换? – 2011-02-28 14:51:02

4

冻胀用户上传脚本,并执行这些是极其危险的。即使您使用disable_functionSuhosin和朋友保护您的系统,您也可能会打开大型安全漏洞。

我不建议用户上传PHP脚本,而是建议您允许他们上传包含专用模板语言的模板。这样的语言通常无法访问根本就没有链接文件的功能。然后,您可以通过白名单打开模板语言,这是一种更安全的方法。

Zeta Componets Template engine具有很强的扩展性,并且可以为PHP开发人员编写直观的模板。也许这是你的选择?

+0

另外一个好消息是白名单,而不是黑名单。 – RobertPitt 2011-02-28 13:46:42

+0

由于用户将上传完整的MVC模块,我已经通过使用Smarty模板引擎解决了View中的权限问题。但我的问题是如何保护控制器和模型。 – SlasherZ 2011-02-28 13:47:58

+0

安全明智,它是一个很好的解决方案,但代码需要非常聪明,以适应限制脚本执行所产生的限制。 – 2011-02-28 13:54:04