假设我有一个想要执行的 NodeJS 代码字符串,但它不受信任,因此我必须使用 vm.runInNewContext(stringOfCode)
将其沙箱化。出现两个问题:
- 如果我确实想在执行的代码中使用一些对象,如何实现?
- 假设我想将代码的执行时间限制为 5 秒,我该怎么做?
- 如何在新进程上运行此代码?我现在可以使用
child_process.fork()
,但是我到底要怎么做呢?
谢谢!!
最佳答案
- 您提供给
vm.runInNewContext()
的sandbox
参数是将可用于沙箱代码的对象。把里面需要用到的东西都放在那里。文档中对此进行了描述:
http://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_sandbox_filename
- 但正如文档所说,您最好将不受信任的代码放入单独的进程中。否则,代码可能会因
while(true);
而挂起。正如您自己提到的,应该使用chlid_process.fork()
来实现这一点。文档在这里:
http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
但在这种情况下,您无法将对象传输到新进程,而应使用消息传递。
最后有一个库可以简化上述所有内容:
关于javascript - Node JS - 在新进程中执行一串代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272956/