Web 服务 - 允许用户注入和运行 php 代码的最佳方式


web services - Best way to allow user to inject and run php code

我一直在考虑允许用户在网站上注入代码并在Web服务器上运行它的想法。这不是一个新想法 - 许多网站允许用户在线"测试"他们的代码 - 例如 http://ideone.com/。

例如:假设我们有一个包含

我的问题是:如何正确地做到这一点?我们应该考虑的事情[和可能的解决方案]:

  • 安全,用户不得做任何坏事,
    • PHP.ini的disable_functions
  • 稳定性, 用户不允许在(true){} 时杀死 Web 服务器提交,
    • set_time_limit()
  • 性能,服务器在可接受的时间内返回答案,
  • 控制,用户可以做任何匹配先前点的事情。

我更喜欢面向PHP的答案,但也欢迎通用方法。提前谢谢你。

我会考虑这个问题,比Web服务器更高,更高。有一个非常没有特权的、被监禁的、chroot 的独立进程来运行这些上传的 PHP 脚本,那么启用与否 PHP 函数都无关紧要,它们都会根据权限和缺乏访问权限而失败。

有一个父进程来监视上述"worker"进程运行了多长时间,如果它运行的时间太长,请将其终止,并向最终用户报告超时错误。

显然,关于

如何在浏览器请求之外异步运行该系统,有许多实现细节需要解决,但我认为这将提供一种非常安全的方式来运行不受信任的 PHP 脚本。

禁用服务器 ini 文件中的功能不会限制应用程序本身的某些功能吗?

我认为您必须对 POST 数据进行一些核心清理并在那里删除"非法"代码。我认为通过添加您描述的其他方法来做到这一点可能会使其起作用。

只要记住。从该 POST 数据中清除永恒的日光。