सर्वोत्तम प्रथाएँ
ऑब्फ़स्केशन को प्रभावी ढंग से कैसे लागू करें: क्या सुरक्षित करें, क्या छोड़ दें, और ऑब्फ़स्केशन आपके लिए क्या नहीं कर सकता।
सुझाव
केवल अपने ही कोड को ऑब्फ़स्केट करें।
वेंडर स्क्रिप्ट्स, लाइब्रेरीज़ या पॉलीफ़िल्स को VM-ऑब्फ़स्केट न करें। वे पहले से मिनिफ़ाई किए हुए होते हैं, और ऑब्फ़स्केशन उन्हें बस धीमा कर देगा।
सटीक सुरक्षा के लिए comment मोड का उपयोग करें।
सब कुछ सुरक्षित करने के बजाय
vmTargetFunctionsModeको'comment'पर सेट करें, फिर केवल संवेदनशील फ़ंक्शन्स को/* javascript-obfuscator:vm */से चिह्नित करें। देखें विशिष्ट फ़ंक्शन्स को लक्षित करना।ऑब्फ़स्केशन के बाद अच्छी तरह परीक्षण करें।
ऑब्फ़स्केटेड कोड का परीक्षण हमेशा अपने लक्षित वातावरण में करें। कुछ विकल्प कोड को सूक्ष्म तरीकों से तोड़ सकते हैं। रनटाइम रक्षा उपाय टेस्ट ऑटोमेशन और डिबगर पर भी प्रतिक्रिया देते हैं; देखें टेस्टिंग और CI।
बार-बार चलने वाले हिस्सों को VM ऑब्फ़स्केशन से बाहर रखें।
एनिमेशन लूप, रियल-टाइम रेंडरिंग या बार-बार कॉल होने वाले कोड के लिए
vmExcludeFunctionsका उपयोग करें। यह केवल रूट-लेवल के फ़ंक्शन नामों से मेल खाता है (Async Executor के साथ, सबसे बाहरीasyncफ़ंक्शन्स के नामों से); नेस्टेड बार-बार चलने वाले कोड को VM से बाहर रखने के लिए comment मोड का उपयोग करें और केवल उन्हीं फ़ंक्शन्स को चिह्नित करें जिन्हें सुरक्षा चाहिए।
महत्वपूर्ण सुरक्षा सूचना
फ़्रंटएंड JavaScript कोड में API कुंजियाँ, सीक्रेट्स या क्रेडेंशियल्स कभी न रखें, ऑब्फ़स्केशन के साथ भी नहीं।
ऑब्फ़स्केशन कोड को समझने और बदलने के लिए ज़रूरी मेहनत बढ़ाता है, लेकिन यह एन्क्रिप्शन नहीं है और यह गारंटी नहीं दे सकता कि रिवर्स इंजीनियरिंग असंभव है। हमलावर के नियंत्रण वाले वातावरण में रनटाइम देखा जा सकता है, इसलिए एक दृढ़ हमलावर क्लाइंट-साइड कोड से डेटा हमेशा निकाल सकता है। सीक्रेट्स और सुरक्षा से जुड़े अंतिम निर्णय सर्वर पर रखें।
व्यवहार में:
- सीक्रेट्स अपने बैकएंड सर्वर पर रखें
- सर्वर-साइड पर एनवायरनमेंट वेरिएबल्स का उपयोग करें
- कुंजियाँ छिपाने के लिए API कॉल्स को अपने बैकएंड के ज़रिए प्रॉक्सी करें
- अपने सर्वर द्वारा जारी किए गए अल्पकालिक टोकन का उपयोग करें
आपको क्या सुरक्षित करना चाहिए?
VM ऑब्फ़स्केशन इनके लिए आदर्श है:
- मालिकाना एल्गोरिदम और बिज़नेस लॉजिक
- लाइसेंस सत्यापन कोड (क्लाइंट-साइड जाँचें)
- एंटी-टैम्परिंग और अखंडता जाँचें
- गेम लॉजिक और एंटी-चीट तंत्र
- प्रीमियम फ़ीचर का इम्प्लीमेंटेशन
- मूल्य गणना का लॉजिक
बिल्ड और रिलीज़
अपने कंपाइल और बंडल किए गए आउटपुट को बिल्ड के अंतिम चरण के रूप में ऑब्फ़स्केट करें; बिल्ड पाइपलाइन के लिए रनटाइम संगतता देखें। आप जो प्रीसेट चुनें, उसकी लागत अपने कोड पर मापें, जैसा प्रीसेट चुनना में बताया गया है। टेस्टिंग बिल्ड पर फ़ंक्शनल टेस्ट चलाएँ, फिर उस अलग रिलीज़ आर्टिफ़ैक्ट को जाँचें जिसे आप वास्तव में शिप करते हैं, जैसा टेस्टिंग और CI में बताया गया है।
