我有一个亚马逊ec2实例(linux)。
我希望您(是的,您)能够上传PHP文件,然后在www.mydomain.com/yourname上直播。我也希望能够为众多其他人(www.mydomain.com/theirname)做到这一点。
我担心你(或者他们,不要指责)可以做恶意的事情(故意或偶然)。例如,一个无限循环,在一个根目录之外读/写,关闭服务器,运行系统命令等。如果我想要恶意,我会尝试这样做。
有没有办法设置PHP / apache / user权限,或者可能在服务之前搜索他们的代码,这样恶意至少会更难,更难?
答案 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
请记住,您提供给沙盒环境的任何资源都可能并且最终会被滥用。例如,如果用户不能影响彼此的结果,并且您确实为用户提供了数据库,请在沙箱中为每个数据库分配不同的凭据。