असुरक्षित जावास्क्रिप्ट URL के साथ फ्रेम तक पहुंचने का प्रयास करता है


112

जब मैं iframe से पैरेंट यूआरएल को हैश मान सेट करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिल रही है, जिसमें एक और डोमेन url शामिल है:

असुरक्षित जावास्क्रिप्ट यूआरएल "URL2" के साथ फ्रेम से URL "URL1" के साथ फ्रेम तक पहुंचने का प्रयास करता है। डोमेन्स, प्रोटोकॉल्स और पोर्ट्स मैच करना चाहिए।

मैं इस समस्या को कैसे ठीक करुं?


3
कृपया अधिक विवरण, कोड स्निपेट, त्रुटि संदेश, आपके द्वारा उपयोग की जाने वाली रूपरेखा .. अधिक
वाचालता

5
जब आप g + 1 को लागू करते हैं, तो facebook या shre और twitter सामाजिक प्लगइन्स को लागू करते हैं जो iframes में लोड होते हैं और उसी त्रुटि को फेंक रहे हैं?

सवाल यह है कि फेसबुक और Google स्क्रिप्ट मेरे वेबसाइट तत्वों तक पहुंचने की कोशिश क्यों कर रहे हैं।
सर्जियो

जवाबों:


124

विभिन्न मूल के एक बच्चे के दस्तावेज़ से आपको शीर्ष विंडो की location.hashसंपत्ति तक पहुंच की अनुमति नहीं है, लेकिन आपको locationस्वयं संपत्ति सेट करने की अनुमति है।

इसका मतलब है कि यह देखते हुए कि शीर्ष विंडोज़ स्थान http://example.com/page/, करने के बजाय है

parent.location.hash = "#foobar";

आपको माता-पिता के स्थान को जानने और करने की आवश्यकता है

parent.location = "http://example.com/page/#foobar";

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

यदि आप इसे क्रॉस-डोमेन संचार के लिए उपयोग कर रहे हैं, तो मैं इसके बजाय easyXDM का उपयोग करने की सलाह दूंगा


13
किसी ने भी इसे उत्तर के रूप में चिह्नित नहीं किया है और अभी तक इसके 60 अपवर्जन हैं। इसके लिए एक बैज होना चाहिए।
२५:१३

35
बिल्ला को क्या कहा जाएगा? "एक आलसी व्यक्ति का जवाब दिया"
nzifnab

1
अरे @ अतुल, दयालु बनो और इस उत्तर को सर्वश्रेष्ठ के रूप में चिन्हित करो। उन सम्मेलनों के प्रति सम्मान रखें जो हम सभी को दूसरों के ज्ञान से लाभान्वित करने की अनुमति देते हैं ...
क्लिंट ईस्टवुड

13

क्रॉसफ़्रेम-स्क्रिप्टिंग तब संभव नहीं है जब दो फ्रेम में अलग-अलग डोमेन हों -> सुरक्षा।

इसे देखें: http://javascript.about.com/od/reference/a/frame3.htm

अब आपके प्रश्न का उत्तर देने के लिए: कोई समाधान या काम नहीं है, आपको बस अपनी वेबसाइट-डिज़ाइन की जांच करनी चाहिए कि अलग-अलग डोमेन से दो फ्रेम क्यों होने चाहिए जो दूसरे के url को बदलता है।


82
यह एक लगातार आवश्यकता है जहां कोई आपकी वेबसाइट में तीसरे पक्ष के एप्लिकेशन को एम्बेड कर रहा है, विशेष रूप से जहां वेब सेवाएं और जैसे विकल्प नहीं है।
जैक्स

9

जब मैं iframe.src के लिए डोमेन को चेस करने की कोशिश करता था तो मुझे वही त्रुटि संदेश मिल रहा था।

मेरे लिए, इसका उत्तर SAME डोमेन पर एक url के लिए iframe.src को बदलना था, लेकिन जो वास्तव में वांछित डोमेन के लिए एक html पुनः-प्रत्यक्ष पृष्ठ था। दूसरे डोमेन ने बिना किसी त्रुटि के मेरे आइफ्रेम में दिखाया।

एक जादू की तरह काम किया। :)


क्या आप यहाँ पर किए गए कार्यों के बारे में अधिक विस्तार से बता सकते हैं?
डेविन जी रोड

यदि आप संक्षेप में बता सकते हैं तो यह वास्तव में उपयोगी होगा।
मधुसूदन

2
नवीनतम Chrome में काम नहीं करता है: यह src पैरामीटर की जांच नहीं करता है, लेकिन वास्तविक URL लोड किया गया है। अतः पुनर्निर्देशित चाल दुर्भाग्य से किसी भी तरह से मदद नहीं करती है :-(
लुकफेर्रारियो

3
मेरा मानना ​​है कि टॉमी जिस चीज का जिक्र कर रहा है वह सर्वर साइड प्रॉक्सी है। उदाहरण के लिए देखें benalman.com/projects/php-simple-proxy या developer.yahoo.com/javascript/howto-proxy.html या google.com/… या René de Kat का समाधान stackoverflow.com/a/1/2424975/27938 पर
Oskar ऑस्टेगार्ड

काफी अच्छा है। लेकिन यह सिर्फ यह दर्शाता है कि आम तौर पर इस के आसपास कितना तुच्छ है। ठीक है, मान लेते हैं कि मैं एक दुष्ट दुर्भावनापूर्ण हैकर हूं, और मैं क्रॉस डोमेन स्क्रिप्टिंग हमलों को चलाना चाहता हूं। संभावना है कि मैं इन उपकरणों के बारे में जानने जा रहा हूं, और उनका उपयोग करूंगा। जहाँ तक ब्राउज़र सुरक्षा ठीक करता है, यह आसानी से मंद है क्योंकि IE आपको चेतावनी के बिना स्थानीय रूप से जावास्क्रिप्ट चलाने नहीं देता है। कोई समस्या नहीं है। नए का एक गुच्छा बनाता है।
यित्ज़ाक

6

एक समाधान एक स्थानीय फ़ाइल का उपयोग करने के लिए हो सकता है जो दूरस्थ सामग्री को पुनर्प्राप्त करता है

remoteInclude.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});


1
यह क्रॉस-साइट स्क्रिप्टिंग कमजोरियों के लिए दरवाजा खोलता है। संभावित हमले का एक उदाहरण: 1. मैं myevilserver.com पर एक पृष्ठ बनाता हूं जो आपकी साइट की तरह दिखता है, जिसमें एक लॉगिन फ़ॉर्म भी शामिल है जो POSTs myevilserver.com पर वापस आता है । 2. मैं आपके उपयोगकर्ताओं को एक लिंक के साथ एक नकली समाचार पत्र भेजता हूं https: // yoursite.com/remoteInclude.php?url=myevilserver.com 3. वे आपकी साइट पर एक लॉगिन फ़ॉर्म देखते हैं जिसे मैं अपने सर्वर पर कैप्चर करता हूं।
एरिकपी

2
एक संभावित समाधान है रिमोटइन्क्लूड करना। डोमेन की पूर्व-अनुमोदित सूची के विरुद्ध सभी url की जाँच करना।
एरिकपी

यह क्रॉस साइट स्क्रिप्टिंग भेद्यता मुद्दों को हल नहीं करता है। वहाँ बिल्कुल कुछ भी नहीं है मैं जावास्क्रिप्ट के साथ एक बाहरी वेबसाइट पर कर सकता हूं जो मैं सर्वर साइड से नहीं कर सकता। यह सब कुछ ब्राउज़र में ही बाधा डालता है और एक अतिरिक्त चरण की शुरुआत करके वेब ऐप्स को कम उपयोगी बनाता है। यदि आप अजाक्स के माध्यम से लोड करते हैं, लिंक को फिर से लिखते हैं, और वापस पोस्ट करते हैं, तब भी आप यह सब कर सकते हैं। यदि वह काम नहीं करता है, तो इसे php या किसी भी भाषा के माध्यम से दूरस्थ rpc करें। यह बेतुका है कि यह औसत कोडर के लिए भी एक मुद्दा है।
यित्ज़ाक

3

मैंने पाया कि HTML5 संस्करण के बजाय फेसबुक जैसे XFBML संस्करण का उपयोग करने से यह समस्या ठीक हो गई। नीचे दिए गए कोड को जोड़ें जहाँ आप बटन दिखाना चाहते हैं:

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

फिर इसे अपने HTML टैग में जोड़ें:

 xmlns:fb="http://ogp.me/ns/fb#"

2
इस सवाल से फेसबुक का क्या लेना-देना है?
कुक्स

16
क्योंकि आपको भी फेसबुक पर बटन की तरह यह त्रुटि आती है और मुझे यह पृष्ठ तब मिला जब किसी उत्तर की खोज करते हुए सोचा कि दूसरों को उत्तर की आवश्यकता हो सकती है।
ल्यूक एल्डर्टन

1

समस्या तब भी है जब आप एक प्रॉक्सी बनाते हैं या सामग्री को लोड करते हैं और इसे इंजेक्ट करते हैं जैसे कि यह स्थानीय है, कोई भी स्क्रिप्ट जो उस सामग्री को परिभाषित करती है उसे अन्य डोमेन से लोड किया जाएगा और क्रॉस-डोमेन समस्याओं का कारण होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.