用最新的技术重新造了一遍 evel 的轮子。
import 攻击,自行试了一下 vm2 sandbox 之类的逃逸漏洞,均无效。vm() 换成 window 代码照样跑得起来。node:vm 会炸。secure-vm 不会。debugger 无效,DevTools 看不到代码来源也下不了断点(在 Chromium 上显示未知或直接隐去具体代码,在 Firefox 上看不到代码内容)。babel 实现一下 ESM 支持,这个在 ses 和 ShadowRealm 实现有得抄。Opera,但是最新版的 Chromium、Edge、Firefox、Safari 是没问题的(其它的我还没测,IE ?哈哈)Worker.terminate() 那样想结束就结束。为了运行不可信任的用户代码/做微应用。可能有的场景有:
现行的前端可用沙箱有 ses 但仍在提案中,而这个大概是支持 ES2021 就能跑的程度了。
相比 ses 这个 TC39 提案来说 secure-vm 的心智负担极小(就个 vm 函数),虽然部分细节不一致但是相对也值得了。
目前这个项目只有一个指定 initalizer 的功能,用来和别的什么东西作兼容。未来还会支持:
preventExtensions 和 setPrototype 之类功能的支持。这是一个又新又旧并且标准还未规定行为的 JS 沙箱。
虽然目前在早期阶段,但我希望后面会越来越好的,加油!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.