安全地为其他人提供PHP服务

时间:2012-08-27 17:52:33

标签: php linux apache security amazon-ec2

我有一个亚马逊ec2实例(linux)。

我希望您(是的,您)能够上传PHP文件,然后在www.mydomain.com/yourname上直播。我也希望能够为众多其他人(www.mydomain.com/theirname)做到这一点。

我担心你(或者他们,不要指责)可以做恶意的事情(故意或偶然)。例如,一个无限循环,在一个根目录之外读/写,关闭服务器,运行系统命令等。如果我想要恶意,我会尝试这样做。

有没有办法设置PHP / apache / user权限,或者可能在服务之前搜索他们的代码,这样恶意至少会更难,更难?

3 个答案:

答案 0 :(得分:8)

除此之外,您肯定希望调整PHP.ini以包含此内容:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

这将阻止在使用此.ini

的任何PHP文件中执行这些功能

我还支持open_basedir支持将用户锁定在他们自己的目录中,这样他们就不会使用以下内容:

require_once '../../another_user/index.php';

$notMyFile = file_get_contents('../../another_user/config.php');

答案 1 :(得分:5)

这样做没有防弹方法。

首先,没有系统调用。

其次,每个脚本超时。

并且,您可能还想在手中保留一个外部“退出按钮”,以便在发现问题时可以拔出插头。

PHP是一种非常大的语言,让其他人在您的服务器上运行代码是一件非常难以安全的事情。

答案 2 :(得分:1)

查看Runkit Sandbox

  

实例化Runkit_Sandbox类会创建一个具有自己的作用域和程序堆栈的新线程。使用传递给构造函数的一组选项,可以将此环境限制为主解释器可以执行的操作的子集,并为执行用户提供的代码提供更安全的环境。

http://php.net/manual/en/runkit.sandbox.php

请记住,您提供给沙盒环境的任何资源都可能并且最终会被滥用。例如,如果用户不能影响彼此的结果,并且您确实为用户提供了数据库,请在沙箱中为每个数据库分配不同的凭据。