मैंने पिछले 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 में इस स्क्रिप्ट का परीक्षण किया और क्रोम नवीनतम और फ़ायरफ़ॉक्स नवीनतम और व्यवहार समान है: अनुरोध किया गया है और ब्राउजर एसओपी करने के लिए इसे उपलब्ध कराने के दौरान सभी प्रतिक्रिया डाउनलोड करता है।
आशा है कि कोई मुझे समझा सकता है कि चश्मा इसके बारे में इतना गलत क्यों हैं या मैं क्या गलत समझ रहा हूं!
[वही मूल नीति] (http://www.w3.org/Security/wiki/Same_Origin_Policy): समान मूल नीति के तहत, जानकारी भेजने के क्रॉस-साइट भी खतरनाक है क्योंकि यह क्रॉस- साइट अनुरोध जालसाजी (सीएसआरएफ) और क्लिकजैकिंग। वही मूल नीति इन सुरक्षा भेद्यताओं को इस तरह से संबोधित नहीं कर सकती है, वैसे ही सूचनाओं को प्राप्त करने के लिए उन लोगों को सूचना प्राप्त करने से रोकता है क्योंकि क्रॉस-साइट हाइपरलिंक्स को प्रतिबंधित किया जाएगा। ** "भेजने की अनुमति" के बिना, कोई भी "वेब" नहीं होगा क्योंकि प्रत्येक मूल को केवल अपने आप से लिंक करने की अनुमति होगी। ** – Andreas
@ एंड्रियास मदद के लिए धन्यवाद लेकिन मुझे लगता है कि मैं स्पष्ट नहीं हो सकता। मैंने यह भी कहा है कि ब्राउजर को बाहरी डोमेन के लिए अनुरोध की अनुमति देनी चाहिए जैसे कि आप एक छवि, एक स्क्रिप्ट, एक सीएसएस शीट एम्बेड करते हैं ... लेकिन अजाक्स के साथ इसे अनुमति देना एक बड़ा खतरा है क्योंकि किसी भी वेबसर्वर के खिलाफ डॉस हमला किया जा सकता है। चश्मा हमेशा कहते हैं कि AJAX का उपयोग कर बाहरी डोमेन को किए गए अनुरोध को हमेशा अवरुद्ध किया जाना चाहिए। जैसा कि मैंने साबित किया है, गलत है क्योंकि अनुरोध अवरुद्ध नहीं किया जा रहा है, केवल प्रतिक्रिया। – Samul
एक छिपे हुए आईफ्रेम के साथ व्यवहार की तुलना करें: यदि सामग्री किसी अन्य डोमेन से है तो इसे जावास्क्रिप्ट में क्रॉस-डोमेन तक नहीं पहुंचा जा सकता है, लेकिन iframe सामग्री "पूरी तरह से डाउनलोड" की जाएगी। हालांकि मैं एक्सएचआर के विनिर्देशों के बारे में निश्चित नहीं हूं, ऐसा लगता है कि प्रतिबंधित डाउनलोड डेटा के हस्तांतरण को शुरू करने के मौजूदा तरीकों की तुलना में यह डाउनलोड-फिर-ब्लॉक * कोई समस्या नहीं है। – user2864740