我正在考虑开发一种编程testing站点,用户可以编写PHP代码,然后在服务器上执行它来testing输出。 我知道你想永远阻止用户执行代码,但有没有办法可以设置,以便系统不受影响?
或者这只是打开了太多的安全漏洞?
这只是一个想法。 我还没有考虑到这一点。 但是,这样做的一种可能的方法是让您的Web应用程序以stringforms接收代码并将其发送到虚拟机进行处理。
这样,您可以保持您的Web应用程序提供您的网站的其他function,从用户的任意PHP执行。
可以设置虚拟机,以便运行的PHP脚本无法访问运行的文件夹,也不能访问networking的任何部分,除了接收来自主机的请求并将数据返回给主机。 你甚至可以在一个状态下冻结虚拟机,以便在重新启动的时候对虚拟机进行任何修改。
再次,这只是一个想法。 可能有缺点,我没有看到。 但要记住的一点是,您需要确保主机上的PHP服务器永远不会执行向VM发送或返回的代码。
有些事情你必须做,以提高安全性:
您应该使用iptables来限制您的testing用户执行任何不需要的networking操作:
iptables -t mangle -A OUTPUT -p tcp -m所有者–uid-owner 1001 -j REJECT
您必须重新更新您的系统软件! 🙂
最后,像洋葱一样考虑安全。 在任何层面上尽最大努力来保护您的系统。 如果在一层上发生安全漏洞,底层应该阻止攻击者…
我认为这是可行的,但是如果你想以任何一种安全的方式做到这一点,那么你一定会把你的工作交给你。 这实际上是任何提供PHP的网站主机为愿意向他们投入一点钱的人所做的。
除非您计划限制对经过身份validation的用户的访问权限,否则您的区别将是一般人都可以使用。
您将需要阅读从PHP / apache一直到操作系统的硬盘系统。 然而,硬化系统会阻止很多事情,这会限制testing的实用性。
如果你这样做,我会强烈推荐你的代码页上的validation/反机器人机制,如validation码/ reCaptcha。
如果你不熟悉系统安全,那么我个人就不会碰它。