是否有可能允许用户以安全的方式执行 PHP 代码?

是否有可能允许用户以安全的方式执行 PHP 代码?

我正在考虑开发一种编程测试网站,用户可以在其中编写 PHP 代码,然后在服务器上执行该代码以测试输出。我知道你总是想防止用户执行代码,但是有没有办法可以设置以使系统不受到损害?

或者这是否只会带来太多安全漏洞?

答案1

这只是一个想法。我考虑这个问题的时间还不到几分钟。但实现此目的的一种可能方法是让您的 Web 应用程序以字符串形式接收代码并将其发送到虚拟机进行处理。

这样,您就可以保护提供网站其他功能的 Web 应用程序免受用户任意 PHP 执行的影响。

可以设置虚拟机,使运行的 PHP 脚本无法访问其运行文件夹之外的内容,也无法访问网络的任何部分,除非从主机接收请求并向主机返回数据。您甚至可以将虚拟机冻结在某种状态下,这样对虚拟机所做的任何更改都会在重新启动时撤消。

再次强调,这只是我的想法。可能存在我没有看到的缺点。但要记住的一件关键事情是,您需要确保主机上的 PHP 服务器永远不会执行发送到 VM 或从 VM 返回的代码。

答案2

为增强安全性你必须采取一些措施:

  1. 您必须禁用许多关键的 php 函数,例如 eval,...
  2. 您必须配置 open_basedir、execution_time 等等……
  3. 您必须安装 php suhosin、fcgi 并正确配置它!
  4. 您必须以不同的用户身份(即测试用户)运行 php,并限制该用户的权限
  5. 你应该使用 SELINUX 来保护系统
  6. 您应该使用 iptables 来限制测试用户执行任何不必要的网络操作:

    iptables -t mangle -A OUTPUT -p tcp -m 所有者 --uid-owner 1001 -j REJECT

  7. 你必须定期更新你的系统软件!:-)

  8. 你也可以设置 chrooted 环境

最后,把安全性看作洋葱一样。尽力保护任何一层的系统安全。如果某一层出现安全漏洞,那么底层应该阻止攻击者……

答案3

我认为这是可行的,但如果你想以任何安全的方式做到这一点,你肯定已经做好了准备。这基本上就是任何提供 PHP 的网站托管商为任何愿意向他们投入一点钱的人所做的。

不同之处在于,它对所有人开放,除非您确实计划限制经过身份验证的用户的访问。

您需要了解有关从 PHP/Apache 到操作系统的强化系统的所有信息。不过,强化系统会阻止许多事情,这会限制测试的实用性。

如果您确实追求这一点,我强烈建议您在代码页上使用像 Captcha/reCaptcha 这样的人工验证/反机器人机制。

如果您不太熟悉系统安全那么我个人不会触及它。

相关内容