国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺談Node.js 沙箱環(huán)境

2024-05-06 15:34:13
字體:
來源:轉載
供稿:網(wǎng)友

node官方文檔里提到node的vm模塊可以用來做沙箱環(huán)境執(zhí)行代碼,對代碼的上下文環(huán)境做隔離。

/A common use case is to run the code in a sandboxed environment. The sandboxed code uses a different V8 Context, meaning that it has a different global object than the rest of the code.

先看一個例子

const vm = require('vm');let a = 1;var result = vm.runInNewContext('var b = 2; a = 3; a + b;', {a});console.log(result);  // 5console.log(a);     // 1console.log(typeof b); // undefined

沙箱環(huán)境中執(zhí)行的代碼對于外部代碼沒有產生任何影響,無論是新聲明的變量b,還是重新賦值的變量a。 注意最后一行的代碼默認會被加上return關鍵字,因此無需手動添加,一旦添加的話不會靜默忽略,而是執(zhí)行報錯。

const vm = require('vm');let a = 1;var result = vm.runInNewContext('var b = 2; a = 3; return a + b;', {a});console.log(result);console.log(a);console.log(typeof b);

如下所示

evalmachine.<anonymous>:1var b = 2; a = 3; return a + b;         ^^^^^^SyntaxError: Illegal return statement  at new Script (vm.js:74:7)  at createScript (vm.js:246:10)  at Object.runInNewContext (vm.js:291:10)  at Object.<anonymous> (/Users/xiji/workspace/learn/script.js:3:17)  at Module._compile (internal/modules/cjs/loader.js:678:30)  at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10)  at Module.load (internal/modules/cjs/loader.js:589:32)  at tryModuleLoad (internal/modules/cjs/loader.js:528:12)  at Function.Module._load (internal/modules/cjs/loader.js:520:3)  at Function.Module.runMain (internal/modules/cjs/loader.js:719:10)

除了runInNewContext外,vm還提供了runInThisContext和runInContext兩個方法都可以用來執(zhí)行代碼 runInThisContext無法指定context

const vm = require('vm');let localVar = 'initial value';​const vmResult = vm.runInThisContext('localVar += "vm";');console.log('vmResult:', vmResult);console.log('localVar:', localVar);console.log(global.localVar);

由于無法訪問本地的作用域,只能訪問到當前的global對象,因此上面的代碼會因為找不到localVal而報錯

evalmachine.<anonymous>:1localVar += "vm";^ReferenceError: localVar is not defined  at evalmachine.<anonymous>:1:1  at Script.runInThisContext (vm.js:91:20)  at Object.runInThisContext (vm.js:298:38)  at Object.<anonymous> (/Users/xiji/workspace/learn/script.js:3:21)  at Module._compile (internal/modules/cjs/loader.js:678:30)  at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10)  at Module.load (internal/modules/cjs/loader.js:589:32)  at tryModuleLoad (internal/modules/cjs/loader.js:528:12)  at Function.Module._load (internal/modules/cjs/loader.js:520:3)  at Function.Module.runMain (internal/modules/cjs/loader.js:719:10)            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 庐江县| 禄劝| 青州市| 吉隆县| 松原市| 蒲江县| 宾阳县| 荆州市| 东光县| 峡江县| 仁寿县| 永新县| 汽车| 保德县| 毕节市| 桦南县| 房山区| 称多县| 潢川县| 桂东县| 邯郸县| 沅陵县| 济阳县| 锡林郭勒盟| 兖州市| 赤峰市| 甘南县| 东海县| 绥化市| 五峰| 石嘴山市| 鸡东县| 义乌市| 永济市| 左贡县| 三河市| 清河县| 咸宁市| 洪雅县| 德阳市| 鲁山县|