Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.JS vm.runInNewContext()与require()和eval()的比较 vm.runInNewContext是否被视为像eval一样的黑魔法 有没有 要求和读取 文件,并使用vm运行它,或者在引擎盖下相同(如果 您实现了缓存等,只是想向 (上下文) runInNewContext并不是用来替代require或eval,而是用来创建一个沙盒环境,您可以在其中安全地运行其他脚本_Node.js_Eval_V8 - Fatal编程技术网

Node.JS vm.runInNewContext()与require()和eval()的比较 vm.runInNewContext是否被视为像eval一样的黑魔法 有没有 要求和读取 文件,并使用vm运行它,或者在引擎盖下相同(如果 您实现了缓存等,只是想向 (上下文) runInNewContext并不是用来替代require或eval,而是用来创建一个沙盒环境,您可以在其中安全地运行其他脚本

Node.JS vm.runInNewContext()与require()和eval()的比较 vm.runInNewContext是否被视为像eval一样的黑魔法 有没有 要求和读取 文件,并使用vm运行它,或者在引擎盖下相同(如果 您实现了缓存等,只是想向 (上下文) runInNewContext并不是用来替代require或eval,而是用来创建一个沙盒环境,您可以在其中安全地运行其他脚本,node.js,eval,v8,Node.js,Eval,V8,缺点是它速度慢(创建需要约10毫秒),并且需要占用数兆字节。因此,不要将其用作require替代品。如果您查看该代码,您将看到它需要使用或隐藏在引擎盖下。然而,require会做一些额外的事情,比如缓存模块 显示了vm命令和eval之间行为的相似性和不同性 所以,require、eval和vm都有一点不同,但都可以用来加载代码。如果加载来自客户端的任意代码,它们都有类似的安全问题。因此,如果我要使用它加载控制器对象(/controllers/blog_controller.js),并在上下文中包

缺点是它速度慢(创建需要约10毫秒),并且需要占用数兆字节。因此,不要将其用作
require
替代品。

如果您查看该代码,您将看到它需要使用或隐藏在引擎盖下。然而,
require
会做一些额外的事情,比如缓存模块

显示了vm命令和eval之间行为的相似性和不同性


所以,require、eval和vm都有一点不同,但都可以用来加载代码。如果加载来自客户端的任意代码,它们都有类似的安全问题。

因此,如果我要使用它加载控制器对象(
/controllers/blog_controller.js
),并在上下文中包含一些帮助程序,那么几乎不会有性能损失,对吗?(控制器只加载一次)不要这样做。对于一般用途的东西来说,这被认为是非常糟糕的做法。为什么您认为您需要对自己的控制器代码进行沙箱处理?同样的原因是railway js使用它,为控制器提供了更丰富的上下文,但是,我发现了一个非常好的解决方案,它比使用
vm
更受我欢迎。谢谢嗨,克里斯,你的更好的解决方案是什么?只是为了记录在案,因为上面指向node.js的源代码链接是“古老的”,这里有一个更新的7.10.0源代码链接:它们使用
vm.runInThisContext
vm.runInDebugContext
。关于
eval
使用逗号表达式,如
(0,eval)(..)
可以在全局范围内对脚本求值,以便在搜索页面上的“eval”时不会污染本地范围。注释维护:这一次是node.js 11.9.0的新源代码链接: