आपको हमेशा एक अलग प्रक्रिया में अविश्वसनीय कोड चलाया जाना चाहिए, जो वास्तव में सैंडबॉक्स मॉड्यूल करता है। एक साधारण कारण यह है कि नोड फ्रीज करेगा।
यह एक अलग प्रक्रिया को शुरू करने से शुरू होता है, जो बाद में जेएसओएन को अपने stdout पर क्रमबद्ध परिणाम भेज देगा। बच्चे की प्रक्रिया के बावजूद माता-पिता की प्रक्रिया निष्पादन जारी है और टाइमआउट ट्रिगर कर सकती है।
अविश्वसनीय कोड strict mode (नियमित जावास्क्रिप्ट में) के साथ बंद होने पर लपेटा जाता है, तो आप अपने दायरे के बाहर डेटा तक पहुंचने के लिए arguments.callee.caller
का उपयोग कर सकते हैं)। अंत में, नोड के एपीआई तक पहुंच को रोकने के लिए बहुत सीमित global
ऑब्जेक्ट पास किया गया है। अविश्वसनीय कोड केवल मूल गणना कर सकता है और फ़ाइलों या सॉकेट तक पहुंच नहीं है।
आप एक प्रेरणा के रूप सैंडबॉक्स के कोड को पढ़ने के लिए चाहिए, मैं इसे उपयोग कर रहा है के रूप में की सिफारिश नहीं होगा:
- कोड पुराने हो रही है और 7 महीने के लिए अद्यतन नहीं किया गया।
- नोड में बाल प्रक्रिया मॉड्यूल पहले से ही आपको आवश्यक अधिकांश सुविधाएं प्रदान करता है, खासकर child_process.fork()।
- child_process.fork द्वारा प्रदान किया गया आईपीसी चैनल शायद बेहतर प्रदर्शन करता है।
बढ़ी हुई सुरक्षा के लिए, आप setuid-sandbox का उपयोग करने पर भी विचार कर सकते हैं। टैब प्रक्रियाओं को फ़ाइल सिस्टम तक पहुंचने से रोकने के लिए Google Chrome द्वारा उपयोग किया जाने वाला कोड है। आपको मूल मॉड्यूल बनाना होगा, लेकिन यह example सरल लगता है।
स्रोत
2012-08-03 12:54:49
मैं 'vm' का उपयोग करने की सलाह दूंगा क्योंकि यह नोड कोर का हिस्सा है। और चूंकि नोड कोर अपनी बग तय करता है, बस मान लें कि यह समस्या ठीक हो जाएगी – Raynos
@ रेनोस यह एक बग नहीं है। दस्तावेज़ कहते हैं कि यह केवल ज्ञात-अच्छे कोड के लिए है। – thejh
@thejh - सच है, लेकिन एपीआई खुद को उचित दृढ़ विश्वास की ओर उधार देता है कि कोड एक पूरी तरह से अलग संदर्भ में निष्पादित कर रहा है, जिसका अर्थ यह है कि कहा गया कोड वर्तमान संदर्भ तक पहुंचने में सक्षम नहीं होना चाहिए। और मुझे उम्मीद है कि एपीआई का * इरादा * बिल्कुल है - स्क्रिप्ट चलाने के लिए एक सैंडबॉक्स प्रदान करना। तो ... मुझे लगता है कि एक सुंदर मजबूत मामला बनाया जा सकता है कि यह केवल एक अच्छी तरह से प्रलेखित बग है। :) – broofa