अपडेट पर वापस जाएँ
New releaseAug 15, 2026

vm2 v3.11.6

Node.js के लिए पृथक JavaScript सैंडबॉक्स जो Proxy-आधारित इंटरसेप्शन के माध्यम से बिल्ट-इन मॉड्यूल और होस्ट संसाधनों तक प्रतिबंधित पहुँच के साथ अविश्वसनीय कोड चलाता है।

साझा करें

vm2 [![NPM Version][npm-image]][npm-url] [![NPM Downloads][downloads-image]][downloads-url] [![License][license-image]][license-url] Node.js CI [![Known Vulnerabilities][snyk-image]][snyk-url]

vm2 एक सैंडबॉक्स है जो अनट्रस्टेड कोड को व्हाइटलिस्टेड Node के बिल्ट-इन मॉड्यूल के साथ चला सकता है।

इंस्टॉलेशन```sh

npm install vm2

## त्वरित उदाहरण```js
import { VM } from 'vm2';

const vm = new VM();
vm.run(`process.exit()`); // TypeError: process.exit is not a function

मैं आपकी मदद करने के लिए यहाँ हूँ, लेकिन आपने कोई इनपुट प्रदान नहीं किया है। कृपया वह Markdown सामग्री साझा करें जिसे आप अनुवाद करना चाहते हैं, और मैं इसे हिंदी में अनुवाद कर दूँगा।```js import { NodeVM } from 'vm2';

const vm = new NodeVM({ require: { external: true, root: './', }, });

vm.run( var request = require('request'); request('http://www.google.com', function (error, response, body) { console.error(error); if (!error && response.statusCode == 200) { console.log(body); // Show the HTML for the Google homepage. } });, 'vm.js', );

## महत्वपूर्ण सुरक्षा अस्वीकरण

**vm2 का उपयोग करने से पहले, आपको समझना चाहिए कि यह कैसे काम करता है और इसकी सीमाएँ क्या हैं।**

vm2 अविश्वसनीय JavaScript कोड को आपके एप्लिकेशन के **उसी Node.js प्रोसेस के भीतर** सैंडबॉक्स करने का प्रयास करता है। यह [Proxies](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Proxy) के एक जटिल नेटवर्क के माध्यम से ऐसा करता है जो सैंडबॉक्स और होस्ट वातावरण के बीच हर इंटरैक्शन को इंटरसेप्ट और मध्यस्थ करता है।

### मूलभूत चुनौती

JavaScript एक अत्यंत गतिशील भाषा है। ऑब्जेक्ट्स को प्रोटोटाइप चेन के माध्यम से एक्सेस किया जा सकता है, कंस्ट्रक्टर्स को एरर ऑब्जेक्ट्स के माध्यम से पहुँचा जा सकता है, सिंबल प्रोटोकॉल हुक प्रदान करते हैं, और एसिंक्रोनस निष्पादन टाइमिंग विंडो बनाता है। JavaScript में एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट तक पहुँचने के तरीकों की विशाल संख्या एक वायुरोधी इन-प्रोसेस सैंडबॉक्स बनाना अत्यंत कठिन बना देती है।

**हम इस वास्तविकता के बारे में ईमानदार हैं:** हमारे सर्वोत्तम प्रयासों के बावजूद, शोधकर्ता और सुरक्षा पेशेवर लगातार vm2 सैंडबॉक्स से बचने के नए तरीके खोजते रहते हैं। हम इन कमजोरियों को रिपोर्ट होते ही सक्रिय रूप से पैच करते हैं, लेकिन इन-प्रोसेस सैंडबॉक्सिंग की बिल्ली-और-चूहे वाली प्रकृति का मतलब है कि:

1. **भविष्य में नए बायपास खोजे जाने की संभावना है।** ज्ञात कमजोरियों के लिए हमारे [सुरक्षा परामर्श](https://github.com/patriksimek/vm2/security/advisories) देखें।
2. **आपको vm2 को अपडेट रखना चाहिए** ताकि नवीनतम सुरक्षा सुधारों का लाभ मिल सके। सुरक्षा परामर्शों की सदस्यता लें और तुरंत अपडेट करें।
3. **vm2 आपकी एकमात्र सुरक्षा रेखा नहीं होनी चाहिए।** अविश्वसनीय कोड चलाते समय गहराई में सुरक्षा (defense in depth) आवश्यक है।

### अधिक मजबूत विकल्प

यदि आपको मजबूत अलगाव गारंटी की आवश्यकता है, तो इन विकल्पों पर विचार करें जो **वास्तविक प्रोसेस या हार्डवेयर-स्तरीय अलगाव** प्रदान करते हैं:

| समाधान | दृष्टिकोण | प्रदर्शन | व्यापार-नापसंद |
|----------|----------|-------------|------------|
| **[isolated-vm](https://github.com/laverdet/isolated-vm)** | अलग V8 आइसोलेट्स (अलग V8 हीप) | तेज़ | मेंटेनेंस मोड में; मैनुअल V8 अपडेट की आवश्यकता |
| **अलग प्रोसेस / वर्कर** | `child_process` या सीमित अनुमतियों वाले वर्कर थ्रेड | मध्यम | उच्च IPC ओवरहेड; डेटा को सीरियलाइज़ किया जाना चाहिए |
| **कंटेनर / VM** | Docker, gVisor, Firecracker | धीमा | स्टार्टअप ओवरहेड; संसाधन-भारी |
| **प्रबंधित सेवाएँ** | क्लाउड-आधारित कोड निष्पादन (जैसे, AWS Lambda, Cloudflare Workers) | परिवर्तनशील | नेटवर्क विलंबता; बाहरी निर्भरता |

### vm2 कब अभी भी उपयुक्त हो सकता है

vm2 तब उपयुक्त हो सकता है जब:
- आपको होस्ट ऑब्जेक्ट्स के साथ घनिष्ठ एकीकरण और तेज़ सिंक्रोनस संचार की आवश्यकता हो
- अविश्वसनीय कोड अपेक्षाकृत विश्वसनीय स्रोत से आता है (जैसे, आंतरिक उपकरण, सत्यापित लेखकों वाले प्लगइन सिस्टम)
- आप vm2 को अन्य सुरक्षा परतों के साथ जोड़ते हैं (नेटवर्क अलगाव, फाइलसिस्टम प्रतिबंध, संसाधन सीमाएँ)
- आप जोखिम स्वीकार करते हैं और सुरक्षा अपडेट के लिए सक्रिय रूप से निगरानी करते हैं

**यदि आप पूरी तरह से अविश्वसनीय स्रोतों (जैसे, मनमाने उपयोगकर्ता सबमिशन) से कोड चला रहे हैं, तो हम दृढ़ता से मजबूत अलगाव गारंटी वाले समाधान का उपयोग करने की सलाह देते हैं।**

## रनटाइम

| रनटाइम | स्थिति |
|---------|--------|
| Node.js | समर्थित। सैंडबॉक्स एक सुरक्षा सीमा है। |
| Bun | **प्रायोगिक।** आंशिक कार्यात्मक संगतता — **नहीं** एक सुरक्षा सीमा। |

Bun पर दो अलग-अलग सीमाएँ लागू होती हैं, और न तो दूसरे का तात्पर्य है।

**यह एक सुरक्षा सीमा नहीं है।** vm2 का खतरा मॉडल, [`docs/ATTACKS.md`](https://github.com/patriksimek/vm2/blob/main/docs/ATTACKS.md) में हमले की सूची, और `test/ghsa/` में हर रिग्रेशन टेस्ट V8 इंटर्नल से प्राप्त होते हैं। JavaScriptCore, जिसका Bun उपयोग करता है, के अपने समकक्ष हैं, और उनमें से किसी को भी vm2 के ब्रिज के विरुद्ध ऑडिट नहीं किया गया है। Bun के अंतर्गत सूट का पास होना संगतता प्रदर्शित करता है, यह नहीं कि सैंडबॉक्स वहाँ टिकता है। **अविश्वसनीय कोड को अलग करने के लिए Bun पर vm2 का उपयोग न करें।**

**संगतता आंशिक है, समानता नहीं।** एक हरा Bun रन केवल उन परीक्षणों को कवर करता है जो वास्तव में वहाँ निष्पादित होते हैं। `test/bun-skips.js` सूचीबद्ध करता है कि क्या बाहर रखा गया है और क्यों, और ज्ञात व्यवहारिक अंतरालों में शामिल हैं:

- `Buffer.from(arrayLike)` शून्य-लंबाई वाला बफर लौटाता है
- `VMScript` `filename` / `lineOffset` / `columnOffset` मेटाडेटा अवलोकन योग्य नहीं है, क्योंकि JSC के CallSite ऑब्जेक्ट्स में कोई विधियाँ नहीं होती हैं
- एक गैर-कॉन्फ़िगर करने योग्य एक्सेसर के साथ जमे हुए होस्ट ऑब्जेक्ट पर `Object.freeze` एक प्रॉक्सी-इनवेरिएंट `TypeError` फेंकता है जहाँ V8 नहीं फेंकता
- सैंडबॉक्स सीमा के पार कुछ `Buffer` ऑपरेशन काफी धीमे हैं — एक 64 MB `allocUnsafe` Node पर 1.7 के मुकाबले 400 सेकंड से अधिक लेता है, इतना धीमा कि हैंग जैसा लगे

Bun समर्थन को विश्वसनीय कोड के लिए सर्वोत्तम-प्रयास संगतता के रूप में मानें, और किसी विशेष व्यवहार पर भरोसा करने से पहले स्किप सूची की जाँच करें।

## विशेषताएँ

-   अविश्वसनीय कोड को आपके कोड के साथ एक ही प्रोसेस में सुरक्षित रूप से चलाता है
-   सैंडबॉक्स के कंसोल आउटपुट पर पूर्ण नियंत्रण
-   सैंडबॉक्स की प्रोसेस की विधियों तक सीमित पहुँच होती है
-   सैंडबॉक्स से मॉड्यूल (बिल्ट-इन और बाहरी) को require करना संभव है
-   आप कुछ (या सभी) बिल्ट-इन मॉड्यूल तक पहुँच सीमित कर सकते हैं
-   आप सैंडबॉक्स के बीच विधियों को सुरक्षित रूप से कॉल कर सकते हैं और डेटा तथा कॉलबैक का आदान-प्रदान कर सकते हैं
-   ज्ञात एस्केप विधियों के पैच के साथ सक्रिय रूप से बनाए रखा गया (देखें [सुरक्षा अस्वीकरण](#important-security-disclaimer))
-   ट्रांसपाइलर समर्थन

## यह कैसे काम करता है

-   यह एक सुरक्षित संदर्भ बनाने के लिए आंतरिक VM मॉड्यूल का उपयोग करता है।
-   यह सैंडबॉक्स से बचने को रोकने के लिए [Proxies](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Proxy) का उपयोग करता है।
-   यह मॉड्यूल तक पहुँच को नियंत्रित करने के लिए बिल्ट-इन require को ओवरराइड करता है।

vm2 के इंटर्नल की गहन जानकारी के लिए, [docs/ATTACKS.md](https://github.com/patriksimek/vm2/blob/main/docs/ATTACKS.md) देखें।

## Node के vm और vm2 के बीच क्या अंतर है?

इसे स्वयं आज़माएँ:```js
import { runInNewContext } from "node:vm";

runInNewContext('this.constructor.constructor("return process")().exit()');
console.log('Never gets executed.');

मैं देख रहा हूँ कि आपने इनपुट प्रदान नहीं किया है। कृपया वह Markdown सामग्री भेजें जिसे आप अनुवाद करना चाहते हैं, और मैं इसे हिंदी में अनुवाद कर दूँगा।```js import { VM } from 'vm2';

new VM().run('this.constructor.constructor("return process")().exit()'); // Throws ReferenceError: process is not defined

## दस्तावेज़ीकरण

श्रेणियाँ