प्रोटोटाइप प्रदूषण हमलों को कैसे रोकें?

Protota Ipa Pradusana Hamalom Ko Kaise Rokem



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

यह मार्गदर्शिका प्रोटोटाइप प्रदूषण हमलों को रोकने के तरीके बताती है।







प्रोटोटाइप प्रदूषण हमलों को रोकें?

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



नीचे दिए गए कोड स्निपेट में, प्रोटोटाइप प्रदूषण कोड इंजेक्ट किया जाएगा:



स्थिरांक y = { ए: 1 , बी: 2 } ;
स्थिरांक डेटा = JSON.parse ( '{'__proto__': {'दोषपूर्ण': सत्य}}' ) ;

स्थिरांक सी = ऑब्जेक्ट.असाइन ( { } , और, डेटा ) ;
कंसोल.लॉग ( सी.दोषपूर्ण ) ;


उपरोक्त कोड स्निपेट का विवरण:





    • सबसे पहले, सूची का नाम ' और ” बनाया गया है और यह मानों को कुंजी-मूल्य जोड़ी में संग्रहीत करता है।
    • की मदद से ' -इसलिए- ”, यादृच्छिक प्रदूषित कोड कुंजी-मूल्य प्रारूप में लागू किया गया है। कुंजी को 'पर सेट किया गया है ख़राब ' और ' का निर्दिष्ट मान सत्य ”।
    • फिर, यह प्रदूषित कोड 'को सौंपा गया है' और ' का आह्वान करके सूची सौंपना() ' विधि, और परिणामी सूची को ' नामक एक नई सूची में संग्रहीत किया जाता है सी ”।
    • अंत में, 'में प्रदूषित कोड इंजेक्ट किया गया' सी सूची पुनर्प्राप्त की गई है और इसका मान कंसोल पर प्रदर्शित किया गया है। यह सुनिश्चित करने के लिए कि प्रदूषण या दुर्भावनापूर्ण डेटा इंजेक्ट किया गया है।

युक्त फ़ाइल को निष्पादित करने के बाद, आउटपुट दिखाता है कि दुर्भावनापूर्ण कोड सफलतापूर्वक इंजेक्ट किया गया है और उसका मान पुनर्प्राप्त कर लिया गया है:



प्रोटोटाइप प्रदूषण हमलों को कैसे रोकें?

ऐसे कई दृष्टिकोण हैं जिनके द्वारा प्रोटोटाइप प्रदूषण हमले को रोका जा सकता है:

असुरक्षित पुनरावर्ती विलय:

असुरक्षित पुनरावर्ती मर्ज से बचें क्योंकि वे प्रोटोटाइप प्रदूषण हमलों का कारण बन सकते हैं:

जहां विलय = ( लेता है , स्रोत ) = > {
के लिए ( var विशेषताएँ में स्रोत ) {
अगर ( के प्रकार ( लेता है [ गुण ] ) === 'ओबीजे' && के प्रकार ( स्रोत [ गुण ] ) === 'ओबीजे' )
{
मर्ज ( लेता है [ गुण ] , स्रोत [ गुण ] ) ;
} अन्य {
लेता है [ गुण ] = स्रोत [ गुण ] ;
}
}
वापस करना लेता है ;
} ;


उपरोक्त कोड में:

    • सबसे पहले, कस्टम फ़ंक्शन ' विलय() 'बनाया गया है जो दो सरणी पैरामीटर स्वीकार करता है' लेता है ' और ' स्रोत ”।
    • उन्नत ' के लिए 'लूप का उपयोग वेरिएबल को पुनरावृत्त करने के लिए किया जाता है' गुण 'प्रदान किए गए से अधिक' स्रोत 'पैरामीटर.
    • लूप के अंदर, ' का उपयोग करें अगर ” कथन जो दोनों त्रुटियों के माध्यम से नेविगेट करता है और यदि दोनों सरणियों में रहने वाले किसी भी तत्व का डेटा प्रकार समान है। फिर उन तत्वों को उसी के पैरामीटर के रूप में पारित किया जाता है ” विलय() 'एक पुनरावर्ती प्रकृति का निर्माण करने वाला कार्य।
    • यदि प्रकार समान नहीं हैं, तो 'में रहने वाला तत्व मान' स्रोत 'पैरामीटर सरणी' को पास कर दी गई है लेता है 'पैरामीटर.
    • अंततः ' लेता है 'पैरामीट्रिक सरणी वापस आ जाती है।

प्रोटोटाइप को फ्रीज करना

प्रोटोटाइप प्रदूषण हमलों की एक और रोकथाम उनके निष्पादन चक्र को स्थिर करना है। यह 'के माध्यम से किया जाता है ऑब्जेक्ट.फ़्रीज़() ' तरीका। नीचे दिए गए स्निपेट में, उपरोक्त इंजेक्ट किया गया प्रोटोटाइप प्रदूषित कोड फ़्रीज़ होने वाला है:

स्थिरांक y = { ए: 1 , बी: 2 } ;
स्थिरांक डेटा = JSON.parse ( '{'__proto__': {'दोषपूर्ण': सत्य}}' ) ;

स्थिरांक सी = ऑब्जेक्ट.असाइन ( { } , और, डेटा ) ;
कंसोल.लॉग ( सी.दोषपूर्ण ) ;

कंसोल.लॉग ( वस्तु.ठंड ( सी.दोषपूर्ण ) ) ;
कंसोल.लॉग ( वस्तु.जमी हुई है ( सी.दोषपूर्ण ) ) ;


उपरोक्त कोड का स्पष्टीकरण नीचे दिखाया गया है:

    • प्रारंभ में, डमी प्रोटोटाइप प्रदूषित कोड को डमी सूची में इंजेक्ट किया जाएगा। और जैसा कि उपरोक्त अनुभाग में बताया गया है।
    • फिर, इंजेक्ट की गई प्रदूषित कुंजी ' ख़राब ' को ' पास कर दिया गया है जमाना() प्रदूषित भाग को जमने की विधि।
    • अंत में, जमे हुए प्रोटोटाइप प्रदूषण भाग की पुष्टि करने के लिए। “ ख़राब 'सूची की कुंजी' सी ' को ' पास कर दिया गया है जमा हुआ है() ' तरीका। यह विधि वापस आती है' सत्य 'जमे हुए के मामले में और' असत्य 'अस्थिर होने की स्थिति में:

युक्त कोड को निष्पादित करने के बाद, आउटपुट दिखाता है कि जमे हुए प्रदूषित कोड का इंजेक्शन, फ्रीजिंग और सत्यापन:


प्रोटोटाइप प्रदूषण हमले को रोकने के लिए अतिरिक्त युक्तियाँ

कुछ अतिरिक्त युक्तियाँ जिनका उपयोग करके प्रोटोटाइप प्रदूषण हमले को रोका जा सकता है, नीचे दी गई हैं:

    • का विकल्प ' -अक्षम-प्रोटो 'का उपयोग' की कार्यप्रणाली को अक्षम करने या ख़त्म करने के लिए किया जा सकता है प्रोटोटाइप.__proto__ ' संपत्ति।
    • की सहायता से विधियों का उपयोग न करें प्रोटोटाइप ”।
    • द्वारा ' उपयोगकर्ता इनपुट को स्वच्छ करना जिसमें किसी भी दुर्भावनापूर्ण या प्रदूषित कोड को हटाने के लिए उपयोगकर्ता इनपुट को मान्य करना और फ़िल्टर करना शामिल है।
    • का उपयोग ' श्वेत सूची ”, जो किसी ऑब्जेक्ट के लिए अनुमत गुणों और विधियों की एक सूची है। ऐसी संपत्तियों या विधियों को सेट करने या प्राप्त करने का कोई भी प्रयास जो श्वेतसूची का सदस्य नहीं है, अवरुद्ध कर दिया जाएगा।

यह सब Node.js में प्रोटोटाइप प्रदूषण हमलों की रोकथाम के बारे में है।

निष्कर्ष

प्रोटोटाइप प्रदूषण हमलों को रोकने के लिए, असुरक्षित पुनरावर्ती विलयों से बचना, प्रोटोटाइप को फ़्रीज़ करना, और रोकने के लिए श्वेतसूची का उपयोग जैसे दृष्टिकोण अपनाए जाते हैं। __इसलिए__ सेट होने से संपत्ति का उपयोग किया जा सकता है। के उपयोग के साथ-साथ -अक्षम-प्रोटो ' विकल्प, ' के उपयोग से बचना ऑब्जेक्ट.प्रोटोटाइप ', और ' उपयोगकर्ता इनपुट को स्वच्छ करना प्रदूषित कोड के लिए। इस गाइड में नोडज में प्रोटोटाइप प्रदूषण हमलों की रोकथाम का वर्णन किया गया है।