डोमेन abc.com में 2 iframes वाला एक पृष्ठ है। दोनों को डोमेन xyz.com से लोड किया गया है। क्या एक्सएसएस सुरक्षा ब्लॉक उन दो आईफ्रेम के बीच जावास्क्रिप्ट एक्सेस/संचार/बातचीत करेगा?एक्सएसएस सुरक्षा। उसी डोमेन से 2 iframes के बीच संचार
उत्तर
जैसा कि जोएल कहते हैं, Same Origin Policy अभिभावक विंडो तक पहुंच को अवरुद्ध कर देगा।
आप कुकीज़ का उपयोग कर एक ही डोमेन से अलग-अलग दस्तावेज़/फ्रेम/विंडो पर क्लाइंट-साइड स्क्रिप्ट के बीच एक संचार चैनल स्थापित कर सकते हैं। एक दस्तावेज़ एक कुकी लिखने के लिए document.cookie
सेट करता है, फिर दूसरा, एक अंतराल परादाता पर, document.cookie
पढ़ता है, इसमें कुछ नया पाता है, और एक संदेश के रूप में व्यवहार करता है।
यह वास्तव में कष्टप्रद है, क्योंकि आपको प्रत्येक दस्तावेज़ को स्वयं पहचानने और संकेत देने के लिए कब और किसके लिए संदेश भेजना है। वास्तव में अंतिम उपाय विधि, वास्तव में।
हां, क्योंकि अन्य फ्रेम में दस्तावेज़ का संदर्भ प्राप्त करने के लिए, आपको मूल दस्तावेज़ का उपयोग करना होगा।
var otherDocument = window.parent.frames[x].document;
// this will fail ---------^
तक पहुँचना भाई फ्रेम भी संभावित, आप यह निर्धारित करने के लिए क्या अन्य डोमेन मूल दस्तावेज़ लोड होने की अनुमति दे सकता है जो एक जोखिम के रूप में लगाया जा सकता है।
abc.com डोमेन पर crossdomain.xml फ़ाइल होगी जो zxy.com को समस्या को हल करने की अनुमति देता है? –
मुझे क्रॉसडोमेन नीति फ़ाइलों के बारे में बहुत कुछ पता नहीं है, लेकिन मुझे लगता है कि ब्राउजर इसका समर्थन करता है तो यह संभव है। – Joel
नहीं। 'crossdomain.xml' फ्लैश के लिए है, यह जेएस समान उत्पत्ति नीति को प्रभावित नहीं करता है। पुनश्च। यह 'window.parent' है। – bobince
iframes समान मूल नीति (एसओपी) द्वारा जावास्क्रिप्ट द्वारा मुख्य पृष्ठ से कोई भी सामग्री प्राप्त करने में सक्षम नहीं होंगे।
हालांकि वे आपकी कुकीज़ का उपयोग करके आपके सर्वर पर पोस्ट (कुछ एक्सेंट्स प्राप्त करें) कॉल करने में सक्षम होंगे (इसे सीएसआरएफ कहा जाता है)। तो अपनी सुरक्षा के लिए केवल सत्र कुकीज़ पर भरोसा न करें।
इसे रोकने के लिए एक अच्छा तरीका है, अपने मुख्य पृष्ठ (iframes के लिए अदृश्य) में टोकन रखना है जिसे आप अपने सर्वर पर हर कॉल में पास करते हैं।
अच्छा, यह संचार द्वारा आपके मतलब पर निर्भर करता है। ऐसा लगता है कि कुछ प्रकार का संचार संभव है। क्योंकि iframes का नाम दिया जाता है हम frame2 में ऐसा कर सकते हैं
<iframe name="test1" src="http://www.xyz.com/frame1.html">
<iframe name="test2" src="http://www.xyz.com/frame2.html">
:
<a href="javascript:alert(document.body.innerHTML)" target="test1">click me</a>
तो हम फ्रेम 2 में लिंक पर क्लिक करें, लेकिन यहाँ एक उदाहरण है: www.abc.com पर एचटीएमएल फ्रेम 1 की सामग्री प्रदर्शित होती है।
यदि यह काम करता है तो आप एक lifesaver हैं! –
छोटे डेमो: http://erlend.oftedal.no/blog/demo/frames/ – Erlend
डेमो एफएफ और आईई में काम करता है, लेकिन क्रोम या ओपेरा नहीं –
बहुत अच्छा विचार +1 क्या कुकी मूल्य का निरीक्षण करने का कोई तरीका है? –
नहीं, आपको सिर्फ एक मतदान लूप (सेट इंटरवल) देखना है। – bobince
याद रखें कि यदि कुकीज़ बड़ी हो जाती है, तो वे अनुरोध तोड़ देंगे (अनुरोध हेडर के सेट के आकार पर सीमाएं हैं)। – Erlend