栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在node.js沙箱中安全地运行用户提交的脚本?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在node.js沙箱中安全地运行用户提交的脚本?

您应该始终在单独的过程中运行不受信任的代码,这正是沙盒模块所做的。一个简单的原因是

vm.runInNewContext('while(true){}',{})
它将冻结节点。

它从产生一个单独的进程开始,随后将在其stdout上将序列化的结果发送到JSON。无论孩子做什么,父进程都会继续执行,并且可能触发超时。

然后,将不受信任的代码包装在严格模式下的闭包中(在常规Javascript中,您可以

arguments.callee.caller
用来访问范围之外的数据)。最后,
global
传递一个非常有限的对象以防止访问节点的API。不受信任的代码只能进行基本计算,不能访问文件或套接字。

虽然您应该阅读沙盒的代码作为灵感,但我不建议按原样使用它:

  • 该代码越来越旧,并且已有7个月未更新。
  • 节点中的“子进程”模块已经提供了您需要的大多数功能,尤其是child_process.fork()。
  • child_process.fork提供的IPC通道可能具有更好的性能。

为了提高安全性,您还可以考虑使用setuid-sandbox。这是Google
Chrome浏览器用来防止制表符进程访问文件系统的代码。您必须制作一个本机模块,但是此示例似乎很简单。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号