【问题标题】:Custom Permissions for a Specific PHP Script特定 PHP 脚本的自定义权限
【发布时间】:2013-03-17 05:28:39
【问题描述】:

我正在开发一个网站,它提供了客户端可以将他们的 PHP 脚本上传到我服务器上的特定目录的选项。我想确保我的系统是安全的,因此我不希望人们能够使用这些 PHP 脚本来编辑或查看它们上传到的目录之外的文件。换句话说,如果public_html/directory1/foo.php 有文件,它应该只能编辑和查看public_html/directory1 中的文件,而不能编辑或查看系统上其他任何地方的文件。有没有办法做到这一点?

【问题讨论】:

    标签: php security permissions


    【解决方案1】:

    这是超级危险的。从技术上讲,如果您了解 linux/windows 用户和组配置、Apache 配置和 PHP 配置的方式,那么有一些方法可以做到这一点。您需要在具有极其特定权限的用户下运行 Apache 并配置 PHP 以禁止某些类型的命令(最值得注意的是 exec/system 命令,但还有很多其他的可能给你带来麻烦)。

    我强烈建议您尝试找出一种方法来避免让您的用户有权将文件上传到一个文件夹,服务器将在该文件夹中将它们作为 PHP 进行评估。有太多可能出错的地方,有太多可以忽略的设置。

    如果您决定走这条路,请阅读有关安全 PHP 配置和 Apache Privilege Separation 的大量信息。

    【讨论】:

    • 我还能走什么路线?我的网站需要允许开发人员编写 Web 应用程序,并且这些应用程序需要托管在我的服务器上。诸如共享托管站点之类的大量服务必须面临类似的问题。我这样做是不是太难了?
    • 就个人而言,我会设置一个单独的服务器,专门用于运行第三方代码。您仍然需要进行大量锁定(确保 Apache 用户无法修改系统文件,并且您的 PHP 设置不允许调用某些函数),但在专用环境,如果你错过了什么,它会限制他们可以造成的伤害。
    【解决方案2】:

    由于 PHP 是服务器端脚本,我相信您会发现很难正确保护您的系统。话虽如此,您可以通过由无权访问其他目录的用户运行 apache 服务器来限制这些文件,请查看SElinux 了解更多信息。请注意,这样做真的很难,您甚至可能忘记一个文件,以后可以用来破解系统。

    更好的方法可能是在虚拟机上运行这些服务器,这样即使有人劫持了虚拟机,您也可以随时关闭它并恢复它的数据。

    【讨论】:

    • 问题是,可能有大量文件需要与所描述的权限相似的权限。让一个单独的 VM 运行数百个单独的 php 脚本似乎是难以管理的。我还找到了 open_basedir,我可以通过 ini_set 为每个单独的文件设置它......这听起来是个好主意吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多