我已经完成了我的研究,并且有一些强大的沙箱用户 JS 方法,即:
- 使用 JS VM,该 VM 使用沙盒形式的 js 运行 JS,例如VM.js
- 使用像 Google Caja 这样的编译器,它添加了额外的检查来保留某些不变量并禁止特定的代码路径
- 使用跨域(和/或
sandbox
ed)iframe
,也可能与 WebWorker 一起使用,例如Jailed
不幸的是,这些都不适用于我的应用程序。我正在尝试构建一个 jsperf.com 替代方案(即基于 Web 的 JS 基准测试系统),因此前两个已退出,因为它们会影响用户提供的代码的性能,这会使任何基准测试结果完全无效。
Jailed 更接近,但也不是一个很好的选择,因为 A) 它的仅白名单方法非常严格,以至于我的网站无法测试 Web 的许多功能(DOM 操作、IndexedDb、WebWorkers、LocalStorage、等等)没有很多我什至不确定是否会工作的白名单,并且 B)我不确定它的维护(因此安全)有多好(因此安全),因为它的 GitHub 存储库上的活动很少。
什么是我可以安全地用来执行用户提供的 JS 进行基准测试的最宽松的系统(就接近运行非沙盒而言)?沙盒是否iframe
足以让基准测试至少可以访问一些DOM 和其他 Web API?WebWorker 真的有必要吗?jsfiddle之类的有什么作用?