यह क्या करता है
JavaScript ऑब्फ़ुस्केटर किसी स्क्रिप्ट को इस तरह दोबारा लिखता है कि वह ठीक वैसे ही चलती रहे, लेकिन लोगों के लिए उसे पढ़ना और कॉपी करना बहुत मुश्किल हो जाए। वेरिएबल और फ़ंक्शन के नाम _0x3f2a जैसे बेमतलब identifiers बन जाते हैं, string literals एक एनकोड की हुई lookup टेबल में चले जाते हैं, और ऊँचे लेवल पर control flow उलट-पुलट कर दिया जाता है और dead code मिला दिया जाता है।
यह ब्राउज़र गेम, डेमो, विजेट और लाइसेंस चेक के लिए उपयोगी है जिन्हें आप सादे JavaScript के रूप में शिप करते हैं और नहीं चाहते कि कोई उन्हें हूबहू कॉपी करे।
कैसे इस्तेमाल करें
- अपना JavaScript पेस्ट करें या कोई
.jsफ़ाइल खोलें। - एक स्ट्रेंथ चुनें:
- कम लोकल नाम बदलता है और स्ट्रिंग्स को lookup ऐरे में ले जाता है। आउटपुट तेज़ और काफ़ी छोटा रहता है।
- मध्यम एनकोड की गई स्ट्रिंग्स, control-flow flattening और कुछ dead code जोड़ता है।
- ज़्यादा सब कुछ पूरी ताक़त से लागू करता है। परिणाम कई गुना बड़ा और साफ़ तौर पर धीमा हो सकता है।
- ग्लोबल नाम बदलें सिर्फ़ तभी चालू करें जब स्क्रिप्ट के बाहर का कुछ भी उसके टॉप-लेवल फ़ंक्शन या वेरिएबल को रेफ़र न करता हो।
- अगर आप परिणाम को कई लाइनों में फैला हुआ चाहते हैं तो एक लाइन में आउटपुट बंद करें।
- ऑब्फ़ुस्केट किया गया कोड कॉपी या डाउनलोड करें और डिप्लॉय करने से पहले टेस्ट करें।
उदाहरण
उदाहरण एक greet फ़ंक्शन और एक विज़िट काउंटर बनाता है। कम स्ट्रेंथ पर ऑब्फ़ुस्केशन के बाद कोड हेक्साडेसिमल नामों की एक लाइन बन जाता है, फिर भी चलाने पर यह Hello, Ada! You have visited 1 time(s). ही प्रिंट करता है।
ऑब्फ़ुस्केशन बनाम मिनिफ़िकेशन
मिनिफ़िकेशन, जैसा JavaScript और CSS मिनिफ़ायर करता है, फ़ाइलों को छोटा और डाउनलोड में तेज़ बनाने के लिए व्हाइटस्पेस हटाता है और नाम छोटे करता है। साइज़ के मामले में ऑब्फ़ुस्केशन उल्टी दिशा में जाता है: यह कोड को समझना मुश्किल बनाने के लिए जानबूझकर indirection जोड़ता है। कई प्रोजेक्ट सब कुछ मिनिफ़ाई करते हैं और सिर्फ़ उन कुछ फ़ाइलों को ऑब्फ़ुस्केट करते हैं जिनमें बचाने लायक लॉजिक हो।
सीमाएँ
ऑब्फ़ुस्केशन सीक्रेट की रक्षा नहीं कर सकता। ब्राउज़र जो कुछ भी चला सकता है, यूज़र आख़िरकार उसकी जाँच कर सकता है, इसलिए API key और ऐसे बिज़नेस नियम जिन्हें निजी रहना है, अपने सर्वर पर रखें। भारी सेटिंग्स कोड को धीमा भी करती हैं, इसलिए hot loops और परफ़ॉर्मेंस के प्रति संवेदनशील पेजों में इनसे बचें।
अक्सर पूछे जाने वाले सवाल
› क्या ऑब्फ़ुस्केशन से मेरे कोड का काम बदल जाता है?
नहीं। ऑब्फ़ुस्केट की गई स्क्रिप्ट मूल की तरह ही व्यवहार करती है; सिर्फ़ उसका रूप बदलता है। अपने टेस्ट हमेशा ऑब्फ़ुस्केट किए गए build पर चलाएँ, क्योंकि जो कोड अपने सोर्स या फ़ंक्शन नामों को जाँचता है वह अलग व्यवहार कर सकता है।
› क्या ऑब्फ़ुस्केट किए गए कोड को उलटा जा सकता है?
पूरी तरह नहीं, लेकिन समय लगाकर कोई ठाना हुआ व्यक्ति फिर भी समझ सकता है कि यह क्या करता है। ऑब्फ़ुस्केशन को सरसरी नकल के ख़िलाफ़ एक स्पीड ब्रेकर मानें, API key जैसे सीक्रेट छिपाने की जगह कभी नहीं।
› ग्लोबल नाम बदलें कब चालू करूँ?
सिर्फ़ तब जब स्क्रिप्ट अपने-आप में पूरी हो। ग्लोबल नाम बदलने से वे HTML attributes, दूसरी स्क्रिप्ट या टेस्ट टूट जाते हैं जो आपके टॉप-लेवल फ़ंक्शन को नाम से बुलाते हैं।
› क्या मेरा कोड अपलोड होता है?
नहीं। ऑब्फ़ुस्केशन ओपन-सोर्स javascript-obfuscator लाइब्रेरी के साथ आपके ब्राउज़र में चलता है।