2010-07-26 14 views
5

पर जावास्क्रिप्ट को कॉल करने के लिए HTTP iFrame को अनुमति देना मेरे पास एक https पृष्ठ (https://example.com/main.php) है जिसमें गैर-https स्रोत (http://example.com/inner.php) वाला आईफ़्रेम है। दोनों फाइलें एक ही सर्वर पर हैं - केवल एक को https के साथ एक्सेस किया जाता है और दूसरा नहीं है। मैं गैर https पृष्ठ की जरूरत parent.myfunction()एचटीटीपीएस पैरेंट फ्रेम

हालांकि के रूप में https main.php कोड इस तरह का उपयोग कर पृष्ठ पर जावास्क्रिप्ट निष्पादित करने के लिए, जब मैं इस कोशिश, मैं निम्नलिखित त्रुटि मिलती है सक्षम होने के लिए:

Unsafe JavaScript attempt to access frame with URL https://example.com/main.php from frame with url http://example.com/inner.php . Domains, protocols and ports must match.

मैं निर्धारित किया है document.domain = 'example.com' दोनों फाइलों पर और मैंने सोचा कि यह ठीक करेगा, हालांकि, यह नहीं है। क्या फ्रेम को पैरेंट फ्रेम पर जावास्क्रिप्ट निष्पादित करने की अनुमति देने का कोई तरीका है और इसके विपरीत? यदि हां, तो इसका सुरक्षा प्रभाव क्या है?

पीएस: आप में से उन लोगों के लिए जो केवल दोनों पृष्ठों के लिए https या http का उपयोग करने का सुझाव देंगे, मैं इसे देख रहा हूं। हालांकि, iframe पृष्ठ में होने वाली प्रक्रियाओं के कारण, यह सर्वर लोड समस्याओं के कारण एक व्यवहार्य विकल्प नहीं हो सकता है।

उत्तर

5

"समान उत्पत्ति नीति" प्रोटोकॉल ("http" या "https"), होस्टनाम और पोर्ट नंबर को शामिल करता है। उन सभी को मिलना है या आप हारना है।

यदि आपका सर्वर लोड पृष्ठ पर एन्क्रिप्शन लागू करने से वास्तव में प्रभावित होगा, तो मुझे संदेह है कि आपको अन्य, गंभीर समस्याएं हैं। इस दिन और उम्र में वास्तव में कोई मुद्दा नहीं होना चाहिए। यदि आपके पास व्यापक रूप से उच्च ट्रैफ़िक साइट है, तो शायद आपको एसएसएल करने के लिए फ्रंट-एंड का उपयोग करना चाहिए।

0

आप जावास्क्रिप्ट के साथ क्रॉस-डोमेन/क्रॉस-प्रोटोकॉल/क्रॉस-पोर्ट एक्सेस नहीं कर सकते हैं। इसे "क्रॉस डोमेन स्क्रिप्टिंग" के रूप में जाना जाता है, जो इस तरह की सुरक्षा के बिना एक मुद्दा है, मैं आईफ्रेम में जीमेल खोल सकता हूं, "यू" और "पी" टेक्स्टबॉक्स प्राप्त कर सकता हूं, और उसके पास उपयोगकर्ता की लॉगिन जानकारी हो सकती है।

जो आपने अपने पीएस में डाला है वह एकमात्र वास्तविक समाधान है जिसका उपयोग आप एक गूंज सर्वर का उपयोग करने के अलावा कर सकते हैं ... जो अधिक हो जाएगा।

4

यदि यह कभी भी ऐसा करने के लिए संभव है जो आप करना चाहते हैं, तो कोई भी SSL-सुरक्षित वेबसाइट कभी सुरक्षित नहीं होगी।

मुझे समस्या का वर्णन करने दें। आइए मान लें कि एक उपयोगकर्ता, ऐलिस, Paypal.com पर अपने खाते तक पहुंचने जा रहा है। मैं, मैलोरी, पेपैल और एलिस के बीच हूं। चूंकि ऐलिस पेपैल तक पहुंचता है, मैं उसके अनुरोध को रोकता हूं और दो चीजों वाला एक पृष्ठ लौटाता हूं: https://paypal.com वाला एक फ्रेम, और जिसमें एक पृष्ठ 'http://my.paypal.com' होने का दावा करता है, जिसे मैंने स्वयं बनाया है। एचटीटीपीएस फ्रेम ठीक से मान्य करता है क्योंकि यह वास्तव में पेपैल से आया था। HTTP फ्रेम में मेरे डिवाइस की कुछ जावास्क्रिप्ट शामिल है जो HTTPS फ्रेम तक पहुंच जाएगी, और जब ऐलिस अपना पासवर्ड दर्ज करेगी तो यह मुझे भेज देगा!

तो नहीं, असुरक्षित सामग्री से सुरक्षित सामग्री तक पहुंचने के लिए ठीक नहीं है, यहां तक ​​कि एक ही डोमेन पर भी।

+0

आपका उदाहरण काम नहीं करता है: "my.paypal.com" डोमेन का उपयोग करना संभव नहीं है क्योंकि _whole_ डोमेन (सभी मौजूदा और मौजूदा सबडोमेन के साथ) पेपैल से संबंधित नहीं है। तो मेरी राय में यह सुरक्षा प्रतिबंध का कारण नहीं है। कारण वही है, जैसे कि आप https के माध्यम से http के माध्यम से किसी भी सामग्री को लोड करना चाहते हैं। – rudi

+1

@ रूडोल्फ मुझे नहीं लगता कि आपने जो कहा है उसे पूरी तरह समझ लिया है। हमलावर एक पृष्ठ को दो * फ्रेम * के साथ देता है। एक फ्रेम में सबसे अच्छा https://paypal.com शामिल है। दूसरे में दुर्भावनापूर्ण जावास्क्रिप्ट है। दुर्भावनापूर्ण जावास्क्रिप्ट "paypal.com से वितरित किया गया था" - लेकिन वास्तव में, मैंने अनुरोध को रोक दिया और जो भी सामग्री मैं चाहता था उसे वापस कर दिया (संभव है क्योंकि यह एक सुरक्षित कनेक्शन नहीं है)।इस प्रकार, दो फ्रेम "एक ही मूल जांच पास करते हैं", लेकिन परिणाम आपदा है। – Borealid

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