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

我正在考虑开发一种编程testing站点,用户可以编写PHP代码,然后在服务器上执行它来testing输出。 我知道你想永远阻止用户执行代码,但有没有办法可以设置,以便系统不受影响?

或者这只是打开了太多的安全漏洞?

这只是一个想法。 我还没有考虑到这一点。 但是,这样做的一种可能的方法是让您的Web应用程序以stringforms接收代码并将其发送到虚拟机进行处理。

这样,您可以保持您的Web应用程序提供您的网站的其他function,从用户的任意PHP执行。

可以设置虚拟机,以便运行的PHP脚本无法访问运行的文件夹,也不能访问networking的任何部分,除了接收来自主机的请求并将数据返回给主机。 你甚至可以在一个状态下冻结虚拟机,以便在重新启动的时候对虚拟机进行任何修改。

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

有些事情你必须做,以提高安全性:

  1. 你必须禁用很多关键的PHP函数,如eval,…
  2. 你必须configurationopen_basedir,execution_time等等,…
  3. 你必须安装php suhosin,fcgi并正确configuration!
  4. 你必须以不同的用户身份运行php(即testing-user)并限制这个用户的权限
  5. 你应该使用SELINUX来保护系统
  6. 您应该使用iptables来限制您的testing用户执行任何不需要的networking操作:

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

  7. 您必须重新更新您的系统软件! 🙂

  8. 你也可以设置一个chroot环境

最后,像洋葱一样考虑安全。 在任何层面上尽最大努力来保护您的系统。 如果在一层上发生安全漏洞,底层应该阻止攻击者…

我认为这是可行的,但是如果你想以任何一种安全的方式做到这一点,那么你一定会把你的工作交给你。 这实际上是任何提供PHP的网站主机为愿意向他们投入一点钱的人所做的。

除非您计划限制对经过身份validation的用户的访问权限,否则您的区别将是一般人都可以使用。

您将需要阅读从PHP / apache一直到操作系统的硬盘系统。 然而,硬化系统会阻止很多事情,这会限制testing的实用性。

如果你这样做,我会强烈推荐你的代码页上的validation/反机器人机制,如validation码/ reCaptcha。

如果你不熟悉系统安全,那么我个人就不会碰它。