2015-12-14 10 views
12

मैं सिर्फ शोध कर रहा था, eval() फ़ंक्शन का उपयोग क्यों खराब है और मुझे कोड इंजेक्शन हमलों के लिए कमजोर होने का एक कारण मिला (पोस्ट: Why is using the JavaScript eval function a bad idea?)।हमें जावास्क्रिप्ट में कोड इंजेक्शन के बारे में क्यों पता होना चाहिए?

लेकिन मेरा सवाल है, क्या हमें जावास्क्रिप्ट में कोड इंजेक्शन के बारे में चिंतित होने की आवश्यकता है? क्योंकि, यदि कोई उपयोगकर्ता किसी वेबसाइट के लिए कोई जेएस स्क्रिप्ट चलाने के लिए चाहता है, तो वह इसे कंसोल में चलाकर कर सकता है।

तो, मैं बस सोच रहा हूं कि यह कितना अतिरिक्त नुकसान हो सकता है, अगर कोई मेरे जावास्क्रिप्ट कोड में अपना कोड इंजेक्ट करने में सफल होता है?

संपादित
नीचे ओलियंडर के जवाब के आधार पर, मैं जोखिम में से एक रास्ता मिल गया है जब हम ब्राउज़र और सर्वर के माध्यम से AJAX कॉल के बीच संचार की है। यह सही समझ में आता है। लेकिन मेरे पास जावास्क्रिप्ट प्रोग्राम हो सकते हैं जो केवल ब्राउज़र में चलते हैं और बैकएंड के लिए कोई संचार नहीं है, उदाहरण के लिए कैलकुलेटर या सरल गेम। तो यहां मेरा पूरक प्रश्न है, क्या कोई अन्य कारण है जो इन कार्यक्रमों को कमजोर बना सकता है?

+1

कोड इंजेक्शन हानिकारक होते हैं जब वे उपयोगकर्ता के अलावा किसी अन्य व्यक्ति द्वारा बनाए जाते हैं। क्या आप सुनिश्चित हैं कि आपका उपयोगकर्ता केवल एक ही है जो 'eval' के तर्क को नियंत्रित करता है? – Bergi

+0

जब मैं जावास्क्रिप्ट के बारे में बात कर रहा हूं, तो यह उपयोगकर्ता होना चाहिए, केवल इनपुट (रूपों में) को संशोधित कर सकता है। मुझे किसी अन्य तरीके से यकीन नहीं है।क्या आपके पास कोई और संभावित उदाहरण है? –

+0

@TareqMahmood मैंने एक उदाहरण पोस्ट किया – Oleander

उत्तर

4

सुरक्षा समस्या तब होती है जब कोई हैकर उपयोगकर्ता द्वारा किए गए JSON अनुरोध में हानिकारक कोड इंजेक्ट करता है, जिसका मूल्यांकन eval का उपयोग करके किया जाता है।

कल्पना कीजिए निम्नलिखित कोड भागा जा रहा है

$.get("/get.json", function(data){ 
    var obj = eval(data) // String to javascript object 
}); 

संसाधन इस

GET /get.json 
{ 
    some: "data" 
} 

तरह लग रहा है लेकिन एक हमलावर अब एक man in the middle attack

function(){ 
    // send window.cookie to attacker 
}(); 

हमलावर उपयोग करने के साथ ऊपर की जगह उपयोगकर्ताओं के सत्र तक पहुंच है।

+0

धन्यवाद। मैं अब इसके बारे में समझता हूं। लेकिन मेरी मूल सोच एक जेएस आधारित फ्रंटेंड गेम या कैलकुलेटर के बारे में थी, जो सर्वर पर किसी भी संचार का उपयोग नहीं करती है। क्या आपको लगता है कि उन कार्यक्रमों में जोखिम का संभावित कारण हो सकता है? –

+0

@TareqMahmood यह सर्वोत्तम प्रथाओं का पालन करने के लिए हमेशा एक सर्वोत्तम अभ्यास है। यदि आप कोनों को काटने की आदत बनाते हैं या संभावित सुरक्षा प्रभावों के बारे में नहीं सीखते हैं, तो आप सर्वर/क्लाइंट प्रकार प्रोजेक्ट में प्रगति करते समय उन प्रथाओं को जारी रखने जा रहे हैं। 'Eval()' फ़ंक्शन जावास्क्रिप्ट के कंपाइलर तक पहुंच प्राप्त करने के लिए है और विभिन्न स्थितियों में गलत तरीके से उपयोग किया जाता है। नोट, eval भी एक खराब प्रदर्शन निहितार्थ है। –

+0

@TareqMahmood मैं गलत हो सकता था, लेकिन मुझे पूरा यकीन है कि इसका "मध्य हमले में आदमी" के साथ कुछ लेना देना नहीं है। –

2

ठीक है अगर आपका कोड क्वेरी स्ट्रिंग से मूल्य लेता है और इसे एक eval में उपयोग करता है, तो हमलावर अपने शिकार को बुरी क्वेरी स्ट्रिंग वाले यूआरएल पर जाने के लिए लुभाने सकता है।

OWASP से:

<script> 
function loadObj(){ 
var cc=eval('('+aMess+')'); 
document.getElementById('mess').textContent=cc.message; 
} 

if(window.location.hash.indexOf('message')==-1) 
    var aMess="({\"message\":\"Hello User!\"})"; 
else 
    var aMess=location.hash.substr(window.location.hash.indexOf('message=')+8); 
</script> 

हमलावर एक लिंक वाला एक ईमेल भेज सकते हैं या यूआरएल

http://example.com/page.html?message=<img onerror="alert(xss)"> 

करने के लिए अपने दुर्भावनापूर्ण साइट पर जाकर एक उपयोगकर्ता अनुप्रेषित सकता है तो फिर तुम एक डोम आधारित XSS हमले की है।

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

+0

समझ में आता है। धन्यवाद! –

+0

लेकिन मेरा दूसरा बिंदु संभव खतरे के बारे में जानना था अगर हम केवल उपयोगकर्ता इनपुट के साथ काम करते हैं। हमारे पास कुकी में संवेदनशील जानकारी हो सकती है। लेकिन क्या होगा यदि हम यूआरएल पैरा के लिए eval का उपयोग नहीं करते हैं, लेकिन हम केवल उपयोगकर्ता इनपुट के लिए उपयोग करते हैं। उदाहरण के लिए एक कैलक्यूलेटर जहां उपयोगकर्ता दो नंबर इनपुट करता है और हम eval फ़ंक्शन का उपयोग करके उनके बीच/sub/mul/div जोड़ते हैं। –

+1

यह वह मामला है जहां 'eval()' स्वीकार्य होगा। जब, बाद में कहें, तो आप परमालिंक कार्यक्षमता को विशिष्ट समीकरणों की अनुमति देते हैं कि यह एक समस्या होगी 'example.com? Calc = 4 + 4' ('4 + 4' URL घटक निश्चित रूप से एन्कोड किया गया)। – SilverlightFox

संबंधित मुद्दे

 संबंधित मुद्दे