Browser Environment

Pro
v7.9.0+

घोषित करें कि आपका प्रोडक्शन बिल्ड कैसे सर्व होता है, ताकि सुरक्षित कोड अपनी अखंडता उससे बाँध सके।

browserEnvironment विकल्प उस परिवेश के बारे में तथ्य घोषित करता है जिसमें आपका प्रोडक्शन बिल्ड सर्व होता है, ताकि सुरक्षित कोड स्वयं को उनसे बाँध सके या उन पर प्रतिक्रिया दे सके। यह एक छोटा ऑब्जेक्ट है, और इसका हर फ़ील्ड किसी एक निश्चित सुरक्षा के साथ ही प्रभावी होता है - अकेले यह विकल्प कुछ नहीं करता:

JavaScript

transport

वह स्कीम जिससे आपका प्रोडक्शन बंडल सर्व करता है - 'http' या 'https'vmSelfDefending के साथ प्रभावी होता है।

'https' के साथ, कोई रिवर्स इंजीनियर जिस प्रति को सादे HTTP पर सर्व करता है, वह सही ढंग से नहीं चलेगी। 'http' या फ़ील्ड न सेट करने पर ऐसी कोई सुरक्षा नहीं जुड़ती।

transport: 'https' घोषित किया गया बिल्ड केवल वहीं सही चलता है जहाँ वह वास्तव में https: पर सर्व होता है। हर दूसरी स्कीम उसे खराब कर देती है, इसलिए इसे तभी घोषित करें जब आपका प्रोडक्शन बिल्ड लोड करने वाला हर संदर्भ HTTPS हो। इसमें ये शामिल नहीं हैं:

  • सादा http://, डेवलपमेंट में http://localhost सहित;
  • file:// - Electron, Cordova और अन्य पैकेज्ड ऐप्स;
  • blob: और about: एम्बेडिंग - about:blank या srcdoc iframe के भीतर चलने वाला बंडल।

क्लाइंट-साइड HTTP→HTTPS रीडायरेक्ट भी पहले HTTP पेज ही रेंडर करता है, इसलिए रीडायरेक्ट पूरा होने से पहले बंडल नहीं चलना चाहिए।

hosting

आपका प्रोडक्शन बंडल कहाँ से सर्व होता है - 'remote' या 'local'vmDebugProtection के साथ, और केवल browser तथा browser-no-eval टारगेट्स पर प्रभावी होता है। इसके लिए ऑब्फ़स्केटर संस्करण 7.14.0 या बाद का चाहिए।

'remote' के साथ, कोई रिवर्स इंजीनियर जिस प्रति को उठाकर अपने स्थानीय सेटअप में चलाता है, उसे रनटाइम परिवेश की असंगति माना जाता है और ऑटोमेशन सुरक्षाएँ vmDefenseReaction में कॉन्फ़िगर किए अनुसार प्रतिक्रिया देती हैं। 'local' या फ़ील्ड न सेट करने पर ऐसी कोई सुरक्षा नहीं जुड़ती।

hosting: 'remote' घोषित किया गया बिल्ड केवल तभी सही चलता है जब उसे किसी रिमोट होस्ट से लोड किया जाए। स्थानीय सेटअप - localhost, कोई डेव सर्वर, file:// - से खोला गया बंडल जानबूझकर असंगति माना जाता है, इसलिए इसे तभी घोषित करें जब आपका प्रोडक्शन बिल्ड लोड करने वाला हर संदर्भ रिमोट रूप से सर्व होता हो, और इसे स्थानीय डेवलपमेंट, टेस्टिंग और CI वाले बिल्ड्स से दूर रखें।

hookedBuiltins

यह घोषित करने के लिए true सेट करें कि जिस रनटाइम में आपका प्रोडक्शन बिल्ड चलता है, वह वैध रूप से नेटिव बिल्ट-इन्स को JavaScript रैपर से बदलता है - ऐप का अपना एंटी-टैम्पर, होस्ट पेज, या उसी realm को साझा करने वाले अन्य ब्राउज़र एक्सटेंशन। vmSelfDefending के साथ प्रभावी होता है। ऑब्फ़स्केटर संस्करण 7.15.0 या बाद का आवश्यक है।

सामान्यतः Self Defending बदले गए नेटिव बिल्ट-इन को छेड़छाड़ मानता है और बिल्ड को चलने से रोक देता है। hookedBuiltins: true के साथ यह ऐसे एनवायरनमेंट को सहन करता है और संरक्षित कोड चलता रहता है। false या अनसेट फ़ील्ड सख़्त व्यवहार बनाए रखता है।

JavaScript

hookedBuiltins जानबूझकर छेड़छाड़ की पहचान को ढीला करता है: एक बार सेट होने पर, आपके कोड की जाँच के लिए उन्हीं बिल्ट-इन्स को रैप करने वाला विश्लेषक भी अब रोका नहीं जाता। VM वर्चुअलाइज़ेशन, एंटी-डिबगिंग और इंटीग्रिटी सुरक्षा अप्रभावित रहती हैं। इसे केवल तभी सक्षम करें जब यह ज्ञात हो कि आपका प्रोडक्शन रनटाइम बिल्ट-इन्स को हुक करता है और वह कमज़ोर गारंटी स्वीकार्य हो।

समर्थित टारगेट

browserEnvironment केवल browser, browser-no-eval और service-worker टारगेट्स पर लागू होता है। node, userscript और bytenode के लिए इस विकल्प को अस्वीकार कर दिया जाता है - ऑब्फ़स्केशन सेटिंग को चुपचाप छोड़ने के बजाय एक वैलिडेशन एरर के साथ विफल हो जाता है। hosting और भी सीमित है: service worker पर इसे स्वीकार तो किया जाता है, पर वहाँ यह कुछ भी नहीं बाँधता।

डैशबोर्ड में Transport, Hosting और Hooked Builtins नियंत्रण Advanced Protection अनुभाग में होते हैं। हर एक तभी संपादन योग्य बनता है जब उससे जुड़ी सुरक्षा चालू हो - Transport और Hooked Builtins के लिए VM Self Defending, Hosting के लिए VM Debug Protection - और टारगेट उसका समर्थन करता हो।

आवश्यकताएँ

  • transport और hookedBuiltins vmSelfDefending के साथ और hosting vmDebugProtection के साथ प्रभावी होते हैं; अन्यथा इनमें से किसी का कोई प्रभाव नहीं।
  • एक browser, browser-no-eval या service-worker टारगेट (hosting के लिए browser या browser-no-eval)।
  • transport के लिए ऑब्फ़स्केटर संस्करण 7.9.0 या बाद का, hosting के लिए 7.14.0 या बाद का, hookedBuiltins के लिए 7.15.0 या बाद का

उदाहरण

JavaScript