如何给PHP文件自己的执行空间,拒绝它访问其目录之外的任何其他文件?

时间:2014-01-20 23:53:27

标签: php security execution

我让用户将PHP文件上传到我的服务器(我知道这是一个安全风险,但必须这样做。)

我可能必须在服务器上执行PHP脚本。

所以我想知道,有没有办法可以拒绝那些PHP脚本访问任何文件和当前文件夹之外的任何目录?这样就可以让我足够安全使用。

感谢。

2 个答案:

答案 0 :(得分:3)

叹息......"但必须完成" - 说谁?

可能存在一些选项:查看documentation for the (now-removed) PHP Safe Mode上的评论,我找到了suPHP的链接,其中"是一个使用其所有者和#34执行PHP脚本的工具。 ;。这将需要每个用户的本地UNIX帐户 - 我不确定在您的情况下是否可行。

真正的解决方案需要更深入。我曾经在一个允许您使用几乎任何语言编译和运行应用程序的网站上,作为考试的一部分。通过编译一些有趣的"程序,我能够确定我实际上是在QEMU VM" jail"中运行,并且他们通过我的HTTP连接以某种方式将IO与VM进行通信。

但正确答案当然可能是不做。随着有关您正在设计的 的更多信息,我们可能会提供更合理的选择。

答案 1 :(得分:1)

您可以为这些脚本设置一个chrooted环境来运行。不是绝对防水,但比可能访问整个文件系统要好得多。

This article包含有关如何在chrooted环境中正确运行某些服务的大量信息,它还包含指向正确使用chroot的best practices document的链接。

现在,php also has a chroot command,有可能通过使用该功能修补某些“足够好”的“沙箱”。

无论如何,尽管chroot在执行外部代码时可以极大地帮助保护您的系统,但您应该非常小心,并且基本规则是尽可能在chrooted环境中提供尽可能少的服务和设施。在这种情况下,Emilio Gort指出的SO文章包含一个(非常长的)可利用函数列表,可能使用php.ini中的disable_functions设置阻止大部分或全部这些函数