我一直在考虑允许用户在网站上注入代码并在Web服务器上运行它的想法。这不是一个新想法 - 许多网站允许用户在线"测试"他们的代码 - 例如 http://ideone.com/。
例如:假设我们有一个包含
我的问题是:如何正确地做到这一点?我们应该考虑的事情[和可能的解决方案]:
-
安全,用户不得做任何坏事,
- PHP.ini的disable_functions
-
稳定性, 用户不允许在(true){} 时杀死 Web 服务器提交,
- set_time_limit()
- 性能,服务器在可接受的时间内返回答案,
- 控制,用户可以做任何匹配先前点的事情。
我更喜欢面向PHP的答案,但也欢迎通用方法。提前谢谢你。
我会考虑这个问题,比Web服务器更高,更高。有一个非常没有特权的、被监禁的、chroot 的独立进程来运行这些上传的 PHP 脚本,那么启用与否 PHP 函数都无关紧要,它们都会根据权限和缺乏访问权限而失败。
有一个父进程来监视上述"worker"进程运行了多长时间,如果它运行的时间太长,请将其终止,并向最终用户报告超时错误。
显然,关于如何在浏览器请求之外异步运行该系统,有许多实现细节需要解决,但我认为这将提供一种非常安全的方式来运行不受信任的 PHP 脚本。
禁用服务器 ini 文件中的功能不会限制应用程序本身的某些功能吗?
我认为您必须对 POST 数据进行一些核心清理并在那里删除"非法"代码。我认为通过添加您描述的其他方法来做到这一点可能会使其起作用。
只要记住。从该 POST 数据中清除永恒的日光。