जावास्क्रिप्ट Obfuscation क्या है और यह एक खतरा क्यों है?


29

एवीजी हाल ही में मुझे बता रहा था कि एक वेबपेज को जावास्क्रिप्ट बाध्यता के कारण अवरुद्ध किया गया था ।

वेबपेज क्यों अवरुद्ध किया गया था और वास्तव में इसका क्या मतलब है?


जवाबों:


38

Obfuscation आपके जावास्क्रिप्ट कोड के वास्तविक अर्थ और आशय को "अस्पष्ट" करने का एक साधन है। कुछ साइटें उन लोगों के लिए एक बाधा के रूप में उपयोग करती हैं जो अपने कोड को कॉपी / उधार लेना चाहते हैं। अन्य साइटें कोड के वास्तविक इरादे को छिपाने के लिए इसका उपयोग करती हैं।

अस्पष्टता के कुछ रूप:

  1. कोड को कम पठनीय और समझने में कठिन बनाने के लिए छोटे अर्थहीन नामों के लिए स्वचालित रूप से चर नामकरण।
  2. सभी अतिरिक्त व्हाट्सएप और लाइन ब्रेक को हटाना ताकि कोड एक विशाल लंबी रेखा हो।
  3. कोड को स्व-जनरेट करने के कुछ हिस्सों को बनाना ताकि कोड का पहला पास वास्तविक कोड बनाने के लिए चलता है जो तब इच्छित ऑपरेशन को पूरा करने के लिए चलता है।
  4. वास्तविक कोड के निर्माण के लिए सामान्य जावास्क्रिप्ट कोड के बजाय eval के साथ संयुक्त वर्ण कोड और स्ट्रिंग हेरफेर का उपयोग करता है।

अस्पष्टता स्वयं बुराई नहीं है, लेकिन इसका उपयोग एक दुष्ट इरादे को छिपाने की कोशिश के लिए किया जा सकता है और शायद यही एवीजी को आपत्ति थी। इसने इतनी अस्पष्टता का पता लगाया कि यह नहीं बता सकता था कि जावास्क्रिप्ट कुछ ऐसा करने की कोशिश कर रहा था जिसे रोकने की कोशिश कर रहा था। जैसे, यह कोड को डिफ़ॉल्ट रूप से असुरक्षित घोषित करता है क्योंकि यह सत्यापित नहीं कर सकता है कि कोड ठीक है।


यही मैंने सोचा था लेकिन सत्यापित करना चाहता था। स्पष्टीकरण के लिए धन्यवाद।
L84

यदि एवीजी एक प्रसिद्ध, प्रतिष्ठित वेब साइट तक पहुंच को रोक रहा है, तो आप शायद इसे ओवरराइड कर सकते हैं। मेरा सुझाव है कि यदि आप साइटों के प्रतिनिधि नहीं जानते हैं।
अपराह्न २१'१२

4
कुछ साइटें js कम्प्रेशन का उपयोग करती हैं, इसलिए यह तेज़ी से लोड होती है (हर कोई अच्छी तरह से), कोड को अस्पष्ट दिखाई देगा।
ज्यूबिक

9
1और 2जावास्क्रिप्ट कम्प्रेसर द्वारा भी किया जाता है। कंप्रेशर्स एक साइड-इफेक्ट के रूप में कोड को बाधित करते हैं, लेकिन यह उनका मुख्य उद्देश्य नहीं है; उनका मुख्य उद्देश्य जावास्क्रिप्ट को छोटा करना, बैंडविड्थ को कम करना है।
ब्लूराज -

5. यह भी तेजी से डाउनलोड के लिए जेएस फ़ाइलों को संपीड़ित करने के लिए प्रयोग किया जाता है। याहू ने ऐसा तब किया है जब से वे वेब पर हैं, और वेब एप्लिकेशन बनाने के लिए Google के उपकरण भी ऐसा करते हैं (जैसे GMail और कैलेंडर)।
क्लो

13

ओबफ्यूसेशन का आशय किसी वस्तु के इच्छित अर्थ को छिपाना है।

इस मामले में, एक स्पष्ट रूप से पठनीय जावास्क्रिप्ट स्निपेट, जैसे कि

window.onload = function() { alert("Hello " + username) };

द्वारा प्रतिस्थापित किया जा सकता है

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

या और भी

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

सभी तीन कोड स्निपेट एक समान काम करते हैं, लेकिन केवल पहले पढ़ने से आप इसके इरादों को आसानी से समझ पाएंगे।

जाहिर है, एवीजी अपने निष्पादन की अनुमति देने से पहले जावास्क्रिप्ट कोड के उद्देश्य को समझने का प्रयास करता है। जब कोड को बाधित किया जाता है, तो AVG संभवतः विफल हो जाएगा। इसलिए चेतावनी।

कहा जा रहा है कि, कुछ वेबसाइटें अपने इरादे को गलत इरादों के कारण नहीं बल्कि उनके काम को चुराने के लिए कठिन बनाने के लिए अपने जावास्क्रिप्ट को बाधित करती हैं। यदि इस उद्देश्य के लिए उपयोग किया जाता है, तो आम तौर पर विरोधाभास बेकार होता है, लेकिन मुद्दा यह है कि आक्षेप आवश्यक रूप से बुरे इरादों का मतलब नहीं है।


3
हालांकि जैसा कि मैंने अक्सर पाया है, deobfusticating कोड ने अक्सर मुझे दिखाया है कि यह चोरी छिपे कोडेड जावास्क्रिप्ट को चोरी करने के लायक नहीं है। यह एक संकेत है कि प्रोग्रामर उचित प्रोग्रामिंग तकनीक की तुलना में चोरी के बारे में चिंता करने में अधिक समय व्यतीत करता है और इसे ठीक से बाधित नहीं किया जा सकता है। केवल ऐसे लोग जो कोड बनाने में समय लगाते हैं, वास्तव में कठिन काम को खराब करने वाले प्रोग्रामर हैं, यही वजह है कि एवीजी ने इसे साइट से बचने के लिए एक बहुत अच्छा कारण बताया।
फासको लैब्स

2
एवीजी एक मशीन है, इंसान नहीं। जाहिर है, एक मशीन कोड को समझ सकती है, जो कि कोड समान कार्य करता है। इसके अलावा, जब वे सर्फ करते हैं तो लोग आमतौर पर जावास्क्रिप्ट को नहीं देखते हैं। यह केवल "एसोसिएशन द्वारा अपराध" का मामला है। कुछ जावास्क्रिप्ट जो खतरनाक है, कुछ विशेष पैटर्न का उपयोग करता है। इसलिए, समान पैटर्न वाले अन्य जावास्क्रिप्ट संदिग्ध हैं।
कज़

@ काज: यह सिर्फ एक उदाहरण था, लेकिन इसमें बहुत अधिक परिष्कृत तरीके हैं, जिन्हें समझने के लिए जावास्क्रिप्ट इंजन की आवश्यकता होती है। मालवेयर स्कैनर आमतौर पर प्रदर्शन कारणों के लिए स्क्रिप्ट निष्पादित करने के बजाय कुछ पैटर्न खोजते हैं।
डेनिस

सैद्धांतिक रूप से बेकार और व्यावहारिक रूप से बेकार होना अलग है - सैद्धांतिक रूप से, ओफ़्स्कैटिंग कोड बेकार है, सहमत है। लेकिन, अगर डोबफुसेटिंग की लागत उपन्यास कोड बनाने की लागत के समान है (या यहां तक ​​कि, लागत आलसी चोरों को रोकने के लिए पर्याप्त उच्च हो जाती है), तो प्रचंड चोरी को रोकने के लिए मोटापा फायदेमंद हो सकता है।
रोनाल्ड

वास्तव में, इसलिए इस मुद्दे पर जो प्रति sefuscation नहीं है , लेकिन कोड की समानता ज्ञात दुर्भावनापूर्ण कोड के लिए है।
काज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.