【问题标题】:PHP MVC SandboxingPHP MVC 沙盒
【发布时间】:2011-07-05 18:31:03
【问题描述】:

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

我的问题是,如何限制 USER 模块与内核发生冲突。例如。取消链接文件等。我可以通过文件权限阻止他们这样做吗?

【问题讨论】:

    标签: php model-view-controller file-permissions sandbox chmod


    【解决方案1】:

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

    然后只需通过 disable_functions 指令禁用危险功能:

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

    【讨论】:

    • 问题是系统核心加载模块并执行它们。因此,将脚本放到另一台服务器上不是一种选择,因为它们需要包含在核心中。
    • 不知道这个限制。一个简单(远非完美)的方法怎么样:在存储 php 文件之前使用搜索和替换?
    【解决方案2】:

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

    我建议您允许他们上传模板,而不是让用户上传 PHP 脚本,这些模板由专用模板语言组成。此类语言通常根本无法访问诸如取消链接文件之类的功能。然后您可以通过白名单打开模板语言,这是一种更安全的方法。

    Zeta Componets Template engine 具有很强的可扩展性,并且模板对于 PHP 开发人员来说非常直观。也许这是您的选择?

    【讨论】:

    • 由于用户会上传完整的MVC模块,我已经通过Smarty模板引擎解决了View中的权限问题。但我的问题是如何保护控制器和模型。
    • 安全方面它是一个很好的解决方案,但代码需要非常智能才能满足限制脚本执行所导致的限制。
    • 我很抱歉,但恕我直言,它(接近)不可能来保护上传的 PHP 代码。 :(
    【解决方案3】:

    希望您系统的每个用户在您的服务器上都有不同的用户帐户。如果他们不这样做,就很难阻止他们删除彼此的数据。

    我假设您正在开发某种风格的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2020-03-10
      相关资源
      最近更新 更多