我正在构建一个系统,让不同的用户可以上传自定义的php模块。该系统基于用PHP编写并在Linux上部署的自定义MVC框架。 当用户登录时,他的模块将由系统内核加载。系统核心在所有模块之间共享。PHP MVC Sandboxing
我的问题是,如何限制用户模块与核心混乱。例如。取消链接文件等。我可以通过文件权限阻止他们这样做吗?
我正在构建一个系统,让不同的用户可以上传自定义的php模块。该系统基于用PHP编写并在Linux上部署的自定义MVC框架。 当用户登录时,他的模块将由系统内核加载。系统核心在所有模块之间共享。PHP MVC Sandboxing
我的问题是,如何限制用户模块与核心混乱。例如。取消链接文件等。我可以通过文件权限阻止他们这样做吗?
希望系统的每个用户在您的服务器上都有不同的用户帐户。如果他们不这样做,让他们避免删除彼此的数据是非常困难的。
我假设你正在研究一些unix服务器的风格。
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
。问题是系统核心加载模块并执行它们。因此,将脚本放到另一台服务器上是不可取的,因为它们需要包含在内核中。 – SlasherZ 2011-02-28 13:23:41
不知道这个限制。一个简单的(非常完美的)方法:在存储php文件之前使用搜索和替换? – 2011-02-28 14:51:02
冻胀用户上传脚本,并执行这些是极其危险的。即使您使用disable_function
,Suhosin和朋友保护您的系统,您也可能会打开大型安全漏洞。
我不建议用户上传PHP脚本,而是建议您允许他们上传包含专用模板语言的模板。这样的语言通常无法访问根本就没有链接文件的功能。然后,您可以通过白名单打开模板语言,这是一种更安全的方法。
Zeta Componets Template engine具有很强的扩展性,并且可以为PHP开发人员编写直观的模板。也许这是你的选择?
另外一个好消息是白名单,而不是黑名单。 – RobertPitt 2011-02-28 13:46:42
由于用户将上传完整的MVC模块,我已经通过使用Smarty模板引擎解决了View中的权限问题。但我的问题是如何保护控制器和模型。 – SlasherZ 2011-02-28 13:47:58
安全明智,它是一个很好的解决方案,但代码需要非常聪明,以适应限制脚本执行所产生的限制。 – 2011-02-28 13:54:04
这看起来像一个很好的解决方案,我会测试它,谢谢:) – SlasherZ 2011-03-01 10:14:27