关于patriksimek/vm2:,网上资料比较零散,这里做个相对完整的总结。
Ready to learn more? Subscribe to our newsletter for weekly tutorials and tips.
正文
vm2是一个沙盒,可以使用白名单节点的内置模块运行不受信任的代码。重要安全免责声明
在使用vm2之前,您应该了解它的工作原理及其局限性。
作为您的应用程序。它通过复杂的网络来实现这一点,
拦截和调解沙箱和主机环境之间的每次交互。
JavaScript是一种非常动态的语言。对象可以通过原型链访问,构造函数可以通过错误对象访问,符号提供协议挂钩,异步执行创建计时窗口。在JavaScript中从一个对象到另一个对象的遍历方式非常多,这使得构建一个密封的进程内沙箱非常困难。
尽管我们尽了最大努力,研究人员和安全专业人员仍在不断发现逃离vm2沙箱的新方法。我们在报告这些漏洞时会积极修补这些漏洞,但进程内沙盒的猫和老鼠本质意味着:
对于已知漏洞,未来可能会发现新的绕过。
从最新的安全修补程序中获益。订阅安全公告并及时更新。
运行不受信任的代码时,深入防御至关重要。
如果您需要更强的隔离保证,请考虑这些替代方案,
IPC开销较高;数据必须序列化Docker、gVisor、Firecracker
基于云的代码执行(例如, AWS Lambda、Cloudflare Workers )
您需要与主机对象的紧密集成和快速的同步通信
不受信任的代码来自相对受信任的来源(例如,内部工具,具有经过审核的作者的插件系统)
将vm2与其他安全层(网络隔离、文件系统限制、资源限制)相结合
更多内容
除了上面提到的内容,还有几个点值得注意。首先是浏览器的兼容性,不同浏览器对Web Crypto API的支持程度有所不同。其次是性能问题,加密操作在大量数据时可能会影响用户体验。最后是密钥管理,如何安全地存储和传输密钥也是一个需要考虑的问题。
篇幅原因就先写这么多,后面有空会再补充更多实战案例。有问题评论区见。
Reference: patriksimek/vm2: Advanced vm/sandbox for Node.js - GitHub
Comments | NOTHING