用最新的技术重新造了一遍 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.