国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 沙雅县| 洮南市| 威远县| 赫章县| 甘南县| 丹江口市| 蓝田县| 保定市| 屏东县| 虹口区| 通化县| 承德市| 英吉沙县| 禹城市| 蒲江县| 广宗县| 葫芦岛市| 库尔勒市| 互助| 济源市| 出国| 河源市| 平果县| 阳泉市| 渭南市| 方山县| 嘉禾县| 梨树县| 乌兰察布市| 夏邑县| 天等县| 武宣县| 林周县| 北海市| 瑞金市| 靖远县| 济源市| 临沭县| 宁波市| 福建省| 游戏|