Https साइट पर iframe के भीतर http कंटेंट की अनुमति कैसे दें


145

मैं कुछ HTML को एक iframe में लोड करता हूं लेकिन जब संदर्भित फ़ाइल http का उपयोग कर रही है, तो https नहीं, मुझे निम्न त्रुटि मिलती है:

[अवरोधित] {current_pagename} पर पृष्ठ {रेफरेंस_फिलनेम} से असुरक्षित सामग्री भागा

क्या इसे बंद करने का कोई तरीका है या इसके आसपास जाने का कोई तरीका है?

Iframe में कोई srcविशेषता नहीं है और सामग्री का उपयोग कर सेट किया गया है:

frame.open();
frame.write(html);
frame.close();


एक संपादन किया। Src सेट नहीं है क्योंकि सामग्री iframe में लिखी गई है
georgphillips

1
सारे सवालों के जवाब देने के लिए धन्यवाद। लंबी कहानी की संक्षिप्त सामग्री है।
georgephillips

@georgephillips क्या आप सामग्री को सम्‍मिलित करने के लिए कोड साझा करेंगे?
गिंटास_

जवाबों:


28

इस प्रश्न की व्यापकता के आधार पर, मुझे लगता है, कि आपको अपने HTTPS प्रॉक्सी को किसी सर्वर पर ऑनलाइन सेटअप करना होगा। निम्न चरण करें:

  • अपना प्रॉक्सी सर्वर तैयार करें - IIS, Apache इंस्टॉल करें
  • सुरक्षा त्रुटियों से बचने के लिए वैध एसएसएल प्रमाणपत्र प्राप्त करें (उदाहरण के लिए startsl.com से मुक्त)
  • एक आवरण लिखें, जो असुरक्षित सामग्री को डाउनलोड करेगा (नीचे कैसे करें)
  • अपनी साइट / ऐप से https://yourproxy.com/?page=http://insecurepage.com प्राप्त करें

यदि आप फ़ाइल / गैजेट_ के माध्यम से बस दूरस्थ साइट सामग्री डाउनलोड करते हैं या परिचित हैं, तो आप अभी भी सामग्री के लिए असुरक्षित लिंक रख सकते हैं। आपको उन्हें रेगेक्स के साथ खोजना होगा और प्रतिस्थापित भी करना होगा। छवियों को हल करना मुश्किल है, लेकिन hard यहां वर्कअराउंड पाया गया: http://foundationphp.com/tutorials/image_pro.gov.in


1
यह काम नहीं करेगा, क्योंकि iframe के पीछे कई पृष्ठ एक iframe में एम्बेड नहीं होना चाहते हैं और इस प्रकार SAMEORIGIN में X- फ्रेम-ऑप्शन हैडर सेट करते हैं। यहां तक कि अगर आप इस प्रॉक्सी का प्रयोग बाईपास करने में सक्षम हैं, पेज /insecurepage.css तरह लोड कुछ करने की कोशिश करेंगे और अपने ब्राउज़र का अनुरोध करेंगे yourdomain / insecurepage.css
मारक

135

नोट: हालांकि इस समाधान ने कुछ ब्राउज़रों में काम किया हो सकता है जब यह 2014 में लिखा गया था, अब यह काम नहीं करता है। iframeHTTPS पृष्ठ में एम्बेड किए गए HTTP URL में HTTP URL पर नेविगेट करना या पुनर्निर्देशित करना , भले ही फ्रेम HTTPS URL के साथ शुरू हुआ हो, आधुनिक ब्राउज़रों द्वारा इसकी अनुमति नहीं है।

मैंने जो सबसे अच्छा समाधान बनाया है, वह बस Google को ssl प्रॉक्सी के रूप में उपयोग करना है ...

https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky

परीक्षण किया और फ़ायरफ़ॉक्स में काम करता है।

अन्य तरीके:

  • एक तीसरी पार्टी का उपयोग करें जैसे कि embed.ly (लेकिन यह वास्तव में केवल प्रसिद्ध एपीआई एपीआई के लिए अच्छा है)।

  • आपके द्वारा नियंत्रित किए जाने वाले किसी https पृष्ठ पर अपनी खुद की रीडायरेक्ट स्क्रिप्ट बनाएं (रिश्तेदार लिंक किए गए पेज पर एक साधारण जावास्क्रिप्ट रीडायरेक्ट को ट्रिक करना चाहिए। कुछ इस तरह: (आप किसी भी लैंग्वेज / विधि का उपयोग कर सकते हैं)

    https://example.com इससे एक iframe लिंक हो रहा है ...

    https://example.com/utilities/redirect.html जो एक सरल जेएस पुनर्निर्देशन की तरह है ...

    document.location.href ="http://thenonsslsite.com";

  • वैकल्पिक रूप से, आप http साइट को पढ़ने और अपने https साइट के भीतर प्रदर्शित करने के लिए RSS फ़ीड जोड़ सकते हैं या कुछ पाठक / पार्सर लिख सकते हैं।

  • आप http साइट के स्वामी को यह भी सुझा सकते हैं कि वे एक ssl कनेक्शन बनाएँ। यदि इसके अलावा कोई अन्य कारण नहीं बढ़ता है तो एसईओ

जब तक आप ssl प्रमाणपत्र बनाने के लिए http साइट के स्वामी को प्राप्त नहीं कर सकते, तब तक सबसे अधिक सुरक्षित और स्थायी समाधान यह होगा कि आप अपनी ज़रूरत की सामग्री को हड़प कर RSS फ़ीड बनाएं (संभवतः आप वास्तव में http साइट पर कुछ भी 'नहीं' कर रहे हैं-क्या है किसी भी सिस्टम में लॉगिंग नहीं)।

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

ध्यान दें, आप इस सुरक्षा उपाय को अधिकांश ब्राउज़रों में अक्षम कर सकते हैं (स्वयं, दूसरों के लिए नहीं)। यह भी ध्यान दें कि ये 'हैक' समय के साथ अप्रचलित हो सकते हैं।


10
शानदार जवाब, धन्यवाद। बस आपको यह बताने के लिए कि जेएस रीडायरेक्ट पद्धति क्रोम में काम नहीं करती है, केवल परिवर्तन को रोकती है (जैसा कि आप इसे सामान्य रूप से लोड करने का प्रयास करते हैं)।
जार्जफिलिप्स

9
पुनर्निर्देशित ट्रिक फ़ायरफ़ॉक्स में ही काम करने लगती है। Chrome अभी भी असुरक्षित सामग्री लोड करने से इनकार करता है। क्या कोई अन्य ज्ञात वर्कअराउंड हैं?
एंड्रियास गोहर

47
बस यह संकेत करना चाहता था कि "https पृष्ठ पर अपनी खुद की रीडायरेक्ट स्क्रिप्ट बनाएं जिसे आप नियंत्रित करते हैं" विधि अब क्रोम (ई-इम) और फ़ायरफ़ॉक्स के वर्तमान संस्करणों के साथ काम नहीं करती है, यहां तक ​​कि जेएस का उपयोग भी करती है।
काको-नवाओ

17
यह उत्तर आज तक किसी भी अन्य समाधान के लिए अमान्य है
samdd

22
उत्तर में 'पदावनत' के रूप में लेबल होने का विकल्प होना चाहिए। यह भ्रम पैदा करता है जब तक कि आप सभी टिप्पणियों को नहीं पढ़ते हैं।
नितिन

28

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन इसका एक और समाधान होगा, उदाहरण के लिए cURL का उपयोग करना:

redirect.php:

<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}

फिर आपके आइफ्रेम टैग में, कुछ इस तरह:

<iframe src="/redirect.php?url=http://www.example.com/"></iframe>

इस विचार को स्पष्ट करने के लिए यह केवल एक न्यूनतम उदाहरण है - यह URL को पवित्र नहीं करता है, और न ही यह किसी और को अपने स्वयं के उद्देश्यों के लिए रीडायरेक्ट.php का उपयोग करने से रोकेगा। अपनी खुद की साइट के संदर्भ में इन बातों पर विचार करें।

हालांकि, यह अधिक लचीला है। उदाहरण के लिए, आप कर्ल के कुछ सत्यापन को जोड़ सकते हैं $ डेटा यह सुनिश्चित करने के लिए कि वास्तव में आप इसे प्रदर्शित करने से पहले क्या चाहते हैं - उदाहरण के लिए, यह सुनिश्चित करने के लिए परीक्षण करें कि यह 404 नहीं है, और यदि आपके पास इसकी स्वयं की वैकल्पिक सामग्री है है।

प्लस - मैं कुछ भी महत्वपूर्ण के लिए जावास्क्रिप्ट रीडायरेक्ट पर भरोसा करने से थोड़ा परेशान हूं।

चीयर्स!


4
यह बहुत काम कर रहा है, लेकिन साइट के अंदर लिंक अमान्य हो रहे हैं। उदाहरण के लिए, मेरे पास एक डोमेन है जिसे example.comएसएसएल कहा जाता है । मैं एक iframe एम्बेड कर रहा हूं example.netजिसके साथ कोई SSL नहीं है। example.comकी तरह एक लिंक है href="https://stackoverflow.com/path/file.html"और जब तक इस पर क्लिक करते हैं, यह के रूप में खोल रहा है https://example.com/path/file.htmlके बजायhttp://example.net/path/file.html
Sibidharan

1
यदि आप यह काम करना चाहते हैं तो लिंक सापेक्ष नहीं हो सकता है। दूसरे शब्दों में, href के भीतर पूरा URL निर्दिष्ट करें। यदि यह गतिशील है तो जावास्क्रिप्ट के URL को सर्वर के साथ-साथ सर्वर के प्रत्येक हिस्से को हथियाने के लिए पुस्तकालय हैं।
एंथनी मेसन

iframe के तहत लक्ष्य साइट का सीएसएस टूट गया है। कृपया जांच करें
राजू आपका

14

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">सिर में जोड़ें

संदर्भ: http://thehackernews.com/2015/04/disable-mixed-content-warning.html

ब्राउज़र संगतता: http://caniuse.com/#feat=upgradinsecurerequests


23
यह समाधान आपको https साइट पर http सामग्री की सेवा करने की अनुमति नहीं देता है। यह सब http अनुरोध के रूप में http अनुरोधों को मजबूर करता है। यदि संसाधन https पर मौजूद नहीं है, तो आपको इसके बजाय 404 त्रुटि मिलेगी।
फेलिक्स

यह वास्तव में मेरी जरूरतों के लिए कम से कम काम करता है .. इसे फ़ायरफ़ॉक्स के साथ परीक्षण किया और काम करने की पुष्टि की। मेरी समस्या स्रोत URL HTTPS अनुपालन नहीं है, जबकि मेरी अपनी वेबसाइट HTTPS का उपयोग कर रही है।
फ़र्नान वेकिना

क्रोम में आकर्षण की तरह काम कर रहा है संस्करण 76.0.3809.132 (आधिकारिक बिल्ड)
मोहम्मद अजहरुद्दीन

8

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

इसका एक तरीका यह है कि आप कंटेंट सर्वर साइड को लोड करें और अपने सर्वर पर इमेज और अन्य चीजों को सेव करें और उन्हें https से प्रदर्शित करें।

आप एम्बेड जैसी सेवा का उपयोग करके भी प्रयास कर सकते हैं। उनके पास https के पीछे सामग्री प्राप्त करने के लिए समर्थन है।


यदि आप सामग्री को परिमार्जन करते हैं और इसे अपनी साइट पर दिखाते हैं तो हमेशा क्रॉस साइट स्क्रिप्टिंग का जोखिम होता है। तो एक ईश्वर समाधान एक अलग url पर सामग्री को परिमार्जन करना और उस url से https के साथ iframe में डेटा प्रस्तुत करना है। इस तरह आप अपने मेनसाइट और सत्र अपहरण पर क्रॉससाइट स्क्रिप्टिंग को रोकते हैं।
Addeladde

6

SSL प्रॉक्सी के रूप में Google का उपयोग करना वर्तमान में काम नहीं कर रहा है,

क्यों?

यदि आपने google से कोई पेज खोला है, तो आप पाएंगे x-frame-optionsकि हेडर में एक फील्ड है। Google प्रतिक्रिया शीर्ष लेख

एक्स फ़्रेम-विकल्पों HTTP प्रतिक्रिया हेडर से संकेत मिलता है या नहीं, एक ब्राउज़र एक में एक पृष्ठ प्रदर्शित करने के लिए अनुमति दी जानी चाहिए इस्तेमाल किया जा सकता <frame>, <iframe>या <object>। साइटें क्लिकजैकिंग हमलों से बचने के लिए इसका उपयोग कर सकती हैं, यह सुनिश्चित करके कि उनकी सामग्री अन्य साइटों में एम्बेड नहीं की गई है।

(एमडीएन द्वारा उद्धरण)

एक उपाय है

इस समस्या के लिए नीचे मेरा काम है:

सामग्री को AWS S3 पर अपलोड करें, और यह संसाधन के लिए एक https लिंक बनाएगा।
सूचना: सभी को इसे देखने की अनुमति के लिए HTML फ़ाइल की अनुमति निर्धारित करें।

उसके बाद, हम इसे srchttps वेबसाइटों में iframe के रूप में उपयोग कर सकते हैं । एडब्ल्यूएस


2

आप PHP या किसी अन्य सर्वर साइड भाषा के साथ जो कुछ भी चाहते हैं उसे स्क्रैप करने की कोशिश कर सकते हैं, फिर स्क्रैप की गई सामग्री को आइफ्रेम डाल सकते हैं। यहाँ PHP के साथ एक उदाहरण है:

scrapedcontent.php:

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

index.html:

<iframe src="scrapedcontent.php"></iframe>

3
आप जेएस और सीएसएस फाइलें, हाइपरलिंक्स और AJAX अनुरोधों सहित छवियों को कैसे संभालेंगे?
14:54 बजे डॉटैंकोहेन

@dotancohen आप सही हैं, यह एक सही समाधान नहीं है, लेकिन मुझे लगता है कि यह इस स्थिति के लिए सबसे अच्छा है। कुछ साइटें जो आपने चर्चा की समस्याओं में नहीं चलेंगी।
अनुदान

1
यह काम करता है, लेकिन इसकी प्रभावी रूप से सामग्री को डबल लोड कर रहा है और इसलिए आपके सर्वर के
स्क्रैपिंग के

2

आपको बस एक प्रॉक्सी सर्वर के रूप में Google का उपयोग करने की आवश्यकता है।

https://www.google.ie/gwt/x?u= IsYourHttpLink]

<iframe src="https://www.google.ie/gwt/x?u=[Your http link]"></frame>

इसने मेरे लिए काम किया।

क्रेडिट: - https://www.wikihow.com/Use-Google-As-a-Proxy


जहां आप इसका उपयोग करने की कोशिश कर रहे हैं।
स्टार टेकट्रिक्स

यह काम नहीं करता।
इगोपिंगविना

1

अपने स्वयं के HTTPS-to-HTTP रिवर्स प्रॉक्सी का उपयोग करें।

यदि आपका उपयोग मामला कुछ के बारे में है, तो शायद ही कभी यूआरएल को बदलने के लिए iframe, आप बस अपने सर्वर पर इसके लिए एक रिवर्स प्रॉक्सी सेट कर सकते हैं और इसे कॉन्फ़िगर कर सकते हैं ताकि httpsआपके सर्वर पर एक httpURL प्रॉक्सी सर्वर पर एक URL पर मैप हो । चूंकि एक रिवर्स प्रॉक्सी पूरी तरह से सर्वरसाइड है, ब्राउज़र यह नहीं पता कर सकता है कि यह असली वेबसाइट के प्रॉक्सी से "केवल" बात कर रहा है, और इस तरह शिकायत नहीं करेगा क्योंकि प्रॉक्सी का कनेक्शन ठीक से एसएसएल का उपयोग करता है।

यदि उदाहरण के लिए आप अपने वेबसर्वर के रूप में अपाचे 2 का उपयोग करते हैं, तो एक रिवर्स प्रॉक्सी बनाने के लिए इन निर्देशों को देखें ।


1
mitmproxyएक डीबगिंग टूल है, न कि प्रोडक्शन प्रॉक्सिमिंग सिस्टम। ngrokटनलिंग सेवा है, ज्यादातर विकास सर्वरों के लिए, मुझे समझ नहीं आता कि यह इसके लिए कैसे उपयोगी हो सकता है।
जूल

@kolen यह टूल्स के बारे में नहीं है, यह इसके लिए एक रिवर्स प्रॉक्सी का उपयोग करने के विचार के बारे में है, अन्य उत्तरों में अभी तक उल्लेख नहीं किया गया है। अब अपाचे में बदलना, जो रिवर्स प्रॉक्सी करने का एक बहुत अधिक सामान्य तरीका है।
तानीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.