2013-10-30 5 views
7

मैंने पिछले 3 दिनों में XMLHttpRequest का उपयोग कर क्रॉस डोमेन अनुरोध बनाने का अध्ययन किया। सबसे अच्छा विकल्प वास्तव में जेएसओएनपी के साथ है जिसका मैं पहले से उपयोग कर रहा हूं।क्रॉस डोमेन AJAX अनुरोध अवरुद्ध नहीं किए जा रहे हैं: क्या यह एक सुरक्षा भेद्यता है?

लेकिन मुझे अभी भी एक सवाल है कि मुझे कहीं भी जवाब नहीं मिला। मैंने सैकड़ों पदों को पढ़ा (एसओएस सहित) और किसी के पास कोई अच्छा उत्तरदायी उत्तर नहीं है (अच्छे संदर्भ के साथ)। उम्मीद है कि यहां कोई मदद कर सकता है।

ने कहा कि, मैंने कई वेबसाइटों में पढ़ा है कि सुरक्षा कारणों से मैं डोमेन example.com से yyy.com पर अजाक्स अनुरोध नहीं कर सकता हूं और जो डेटा चाहता हूं उसे प्राप्त कर सकता हूं। यह बहुत स्पष्ट है और मुझे इसके बारे में कोई सवाल नहीं है। लेकिन समस्या यह है कि जब मैं अपने लोकहोस्ट में नीचे कोड चलाता हूं (इसलिए मेरा डोमेन "लोकलहोस्ट" है और मुझे किसी अन्य डोमेन से किसी भी डेटा का अनुरोध करने में सक्षम नहीं होना चाहिए)।

xhReq = new XMLHttpRequest(); 
xhReq.open("GET","http://domain.com.br?parameter",true); 
xhReq.send(null); 

जब मैं Firebug नेट टैब का निरीक्षण मुझे लगता है कि अनुरोध को अवरुद्ध नहीं कर रहा था! यह स्पष्ट रूप से अनुरोध किया गया था। मैं विश्वास नही कर सकता। इसलिए मैंने domain.com.br/log.php में एक फ़ाइल बनाई, जहां मैं अपने डोमेन को मारने वाले किसी भी अनुरोध को लॉग कर सकता था। आश्चर्यजनक रूप से मैं सभी अनुरोधों को स्थानीयहोस्ट फायर कर रहा था, my domain.com.br पर हमला कर रहे थे। जब मैंने प्रतिक्रिया प्राप्त करने का प्रयास किया तो मैं वास्तव में इसे अपने क्रोम और FIrebug ब्राउज़र की मूल उत्पत्ति के कारण प्राप्त नहीं कर सका। लेकिन मैं वास्तव में हैरान था कि अनुरोध ने वास्तव में वेबसर्वर को मारा, हालांकि मैं जवाब में कोई बदलाव नहीं कर सका।

अधिक आश्चर्यजनक बात यह है कि यदि डोमेन.com.br/log.php 1 एमबी की तरह एक बड़ा प्रतिक्रिया उत्पन्न करता है तो मेरी फायरबग ने मुझे दिखाया कि ब्राउज़र वेबसर्वर से सभी 1 एमबी डाउनलोड करता है, और अंत में यह एक संदेश दिखाता है " पहुंच के रूप में प्रवेश से इनकार कर दिया। तो यदि सभी मूल नीति नीति को पढ़ने के लिए मना कर देती है तो सभी फाइलें डाउनलोड क्यों करें।

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

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

मैंने आईई 7, 8 और 9 में इस स्क्रिप्ट का परीक्षण किया और क्रोम नवीनतम और फ़ायरफ़ॉक्स नवीनतम और व्यवहार समान है: अनुरोध किया गया है और ब्राउजर एसओपी करने के लिए इसे उपलब्ध कराने के दौरान सभी प्रतिक्रिया डाउनलोड करता है।

आशा है कि कोई मुझे समझा सकता है कि चश्मा इसके बारे में इतना गलत क्यों हैं या मैं क्या गलत समझ रहा हूं!

+2

[वही मूल नीति] (http://www.w3.org/Security/wiki/Same_Origin_Policy): समान मूल नीति के तहत, जानकारी भेजने के क्रॉस-साइट भी खतरनाक है क्योंकि यह क्रॉस- साइट अनुरोध जालसाजी (सीएसआरएफ) और क्लिकजैकिंग। वही मूल नीति इन सुरक्षा भेद्यताओं को इस तरह से संबोधित नहीं कर सकती है, वैसे ही सूचनाओं को प्राप्त करने के लिए उन लोगों को सूचना प्राप्त करने से रोकता है क्योंकि क्रॉस-साइट हाइपरलिंक्स को प्रतिबंधित किया जाएगा। ** "भेजने की अनुमति" के बिना, कोई भी "वेब" नहीं होगा क्योंकि प्रत्येक मूल को केवल अपने आप से लिंक करने की अनुमति होगी। ** – Andreas

+1

@ एंड्रियास मदद के लिए धन्यवाद लेकिन मुझे लगता है कि मैं स्पष्ट नहीं हो सकता। मैंने यह भी कहा है कि ब्राउजर को बाहरी डोमेन के लिए अनुरोध की अनुमति देनी चाहिए जैसे कि आप एक छवि, एक स्क्रिप्ट, एक सीएसएस शीट एम्बेड करते हैं ... लेकिन अजाक्स के साथ इसे अनुमति देना एक बड़ा खतरा है क्योंकि किसी भी वेबसर्वर के खिलाफ डॉस हमला किया जा सकता है। चश्मा हमेशा कहते हैं कि AJAX का उपयोग कर बाहरी डोमेन को किए गए अनुरोध को हमेशा अवरुद्ध किया जाना चाहिए। जैसा कि मैंने साबित किया है, गलत है क्योंकि अनुरोध अवरुद्ध नहीं किया जा रहा है, केवल प्रतिक्रिया। – Samul

+0

एक छिपे हुए आईफ्रेम के साथ व्यवहार की तुलना करें: यदि सामग्री किसी अन्य डोमेन से है तो इसे जावास्क्रिप्ट में क्रॉस-डोमेन तक नहीं पहुंचा जा सकता है, लेकिन iframe सामग्री "पूरी तरह से डाउनलोड" की जाएगी। हालांकि मैं एक्सएचआर के विनिर्देशों के बारे में निश्चित नहीं हूं, ऐसा लगता है कि प्रतिबंधित डाउनलोड डेटा के हस्तांतरण को शुरू करने के मौजूदा तरीकों की तुलना में यह डाउनलोड-फिर-ब्लॉक * कोई समस्या नहीं है। – user2864740

उत्तर

5

अनुरोध बनाया जा सकता है, और सर्वर सीओआरएस के बावजूद प्रतिक्रिया उत्पन्न कर सकता है। हालांकि, प्रतिक्रिया छिपाया जा सकता है। balpha wrote about this in his blog हाल ही में:

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

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

+0

भेजने के अनुरोध को रोकने के बारे में कोई शब्द नहीं मदद के लिए धन्यवाद। आपके द्वारा प्रदान किया गया लिंक मदद करता है लेकिन बहुत अधिक नहीं। समस्या यह है कि हर जगह मैंने पढ़ा है कि वे कहते हैं कि ब्राउज़र शो अजाक्स का उपयोग करने के अनुरोध को भी अनुमति नहीं देता है। मुझे पता है कि अगर मैं बाहरी स्रोत के साथ डालता हूं तो यह न केवल बाहरी संसाधन को दबाएगा बल्कि इसे डाउनलोड करेगा और एक छवि की तरह प्रस्तुत प्रतिक्रिया दिखाएगा। लेकिन चश्मा वास्तव में स्पष्ट हैं कि अनुरोध पूरा नहीं होना चाहिए। यह एक सुरक्षा खतरा है क्योंकि मैं इस 3 लाइन कोड का उपयोग करके किसी भी वेबसाइट को नुकसान पहुंचा सकता हूं, जैसे कि डॉस हमले। – Samul

+0

@ सैमुल लेकिन आप एक सादे सी कंसोल (हालांकि 3 से अधिक लाइनों के साथ) में कोड की उन 3 लाइनों को लागू कर सकते हैं जिनके पास बिल्कुल कॉरस की कोई अवधारणा नहीं है। सीओआरएस ब्लॉक को अनुरोध करने से कोई अतिरिक्त सुरक्षा नहीं मिलती है। – vcsjones

+0

मैं आपसे सहमत हूं। सीओआरएस डॉस हमले को रोकता नहीं है क्योंकि मैं यूआरएल में एक जीईटी पैरामीटर जोड़ सकता हूं और सीओआरएस के बावजूद यह हमेशा अलग दिखाई देगा, ब्राउज़र को उस वेबसाइट का फिर से अनुरोध नहीं करना चाहिए। यूआरएल को बदलना (यहां तक ​​कि एक यादृच्छिक पैरामीटर भी जोड़ना) ब्राउज़र को वेबसर्वर द्वारा भेजे गए किसी भी शीर्षलेख के बावजूद बाहरी संसाधन का अनुरोध करेगा। – Samul

0

आप एक साधारण छवि फ़ाइल के साथ एक ही प्रभाव (जैसे डॉस हमले की तरह) प्राप्त कर सकते हैं, यह आवश्यक रूप से XHR होने की आवश्यकता नहीं है। एक अलग फ़ाइल से एक छवि फ़ाइल को लिंक करें, इसे अपने पृष्ठ में लाखों डाल दें, इसे अपने उपयोगकर्ताओं और बूम पर प्रदर्शित करें।

+0

आप बहुत सही हैं! लेकिन यह बहुत अच्छी तरह से ज्ञात है कि बाहरी छवियों, स्क्रिप्ट, सीएसएस शीट्स को किसी पृष्ठ में एम्बेड करना संभव है ... लेकिन यह भी स्पष्ट था कि बाहरी संसाधन का अनुरोध करते समय अजाक्स अनुरोधों को हमेशा अवरुद्ध किया जाना चाहिए। जैसा कि मैंने साबित किया, केवल प्रतिक्रिया अवरुद्ध हो रही है। और इसमें एक संभावित खतरा है: अजाक्स का उपयोग करके मैं किसी भी वेबसर्वर लॉगिन को पोस्ट कर सकता हूं और अपने डेटाबेस को अधिभारित कर सकता हूं जो मैं छवियों के साथ नहीं कर सका। – Samul

+0

मुझे यकीन नहीं है कि नीति के लिए अनुरोध है कि अनुरोध अस्वीकार किया जाना चाहिए या पहुंच। वे अलग हैं। हालांकि आप XHR के बिना किसी भी वेबसाइट पर किसी भी पोस्ट को अनुकरण कर सकते हैं। एक फॉर्म बनाएं, लक्ष्य वेबसाइट के लॉगिन पेज पर कार्रवाई सेट करें। पेज लोड पर जमा करें! यहां आपके पास कोई एक्सएचआर पोस्ट अनुरोध नहीं है। – regulus

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