绑定到node.js+vm2可以帮助您安全地执行javascript。
node-vm2的Python项目详细描述
python 3到node.js+vm2的绑定可以帮助您安全地执行javascript。
工作原理
该模块启动一个node.js repl服务器,该服务器可以与json通信。所有javascript代码都用json编码并发送到服务器。服务器在vm2中执行代码后,将结果发送回python。
安装
你需要node.js。
从pypi控制盘安装node-vm2。
pip install node_vm2
还要确保在PATH中有node可执行文件,或者可以使用环境变量NODE_EXECUTABLE指定可执行文件。
此外,您还需要npm来从源代码构建节点vm2。
用法
大多数api都绑定到vm2。
简单评估:
fromnode_vm2importevalprint(eval("['foo', 'bar'].join()"))
使用虚拟机:
fromnode_vm2importVMwithVM()asvm:vm.run(""" var sum = 0, i; for (i = 0; i < 10; i++) sum += i; """)print(vm.run("sum"))
使用nodevm:
fromnode_vm2importNodeVMjs="""exports.greet = name => console.log(`Hello ${name}!`);"""withNodeVM.code(js)asmodule:module.call_member("greet","John")
可以使用promise执行异步任务:
fromdatetimeimportdatetimefromnode_vm2importNodeVMjs=""" exports.test = () => { return new Promise(resolve => { setTimeout(() => { resolve("hello") }, 3000); }); }; """withNodeVM.code(js)asmodule:print(datetime.now())print(module.call_member("test"))print(datetime.now())
如果您想让vm使您的服务器崩溃(例如process.exit()),您应该在单独的服务器中创建vm,这样它就不会影响其他vm:
fromnode_vm2importVMServer,VMwithVMServer()asserver:withVM(server=server)asvm:# now the vm is created in a new serverprint(vm.run("1 + 2 + 3"))
更改日志
- 0.3.6(2019年4月22日)
- 将vm2更新到3.8.0。解决安全问题。
- 0.3.5(2019年2月10日)
- 更新vm2至3.6.10。解决安全问题。
- 0.3.4(2018年8月10日)
- 更新vm2至3.6.3。解决安全问题。
- 0.3.3(2018年7月23日)
- 修正:不要捆绑开发依赖项。
- 0.3.2(2018年7月23日)
- 修复:获取冻结对象会使服务器崩溃。
- 更新vm2至3.6.2。解决安全问题。
- 0.3.1(2017年4月25日)
- 将commandarg添加到VMServer。
- 修复:如果进程生成失败,将创建一个死的默认服务器。
- 0.3.0(2017年4月23日)
- change:使用事件队列处理控制台重定向。
- 重新确认虚拟机抛出的对象,该对象不继承内置错误。
- 0.2.0(2017年3月25日)
- drop nodebridge.
- 添加vmserver。
- 使所有vm共享一个默认vmserver。
- 方法重命名:vm.connect->;vm.create,vm.close->;vm.destroy。
- 0.1.0(2017年3月23日)
- 首次发布