IFrame के 3rd पार्टी साइट फ्रेम के माध्यम से मेरे साइट पेज को कैसे रोका जाए


81

मुझे कैसे पता चलेगा कि पेज लोडिंग के दौरान मेरा पेज दूसरी साइट पर फ्रेम के रूप में एम्बेडेड है? मुझे लगता है कि रेफरर अनुरोध हेडर यहां मेरी मदद नहीं कर सकता है? धन्यवाद।


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

नोट: मेटा टैग सेट करना बेकार है! उदाहरण के लिए, <मेटा http-equiv = "X- फ़्रेम-विकल्प" सामग्री = "इनकार"> का कोई प्रभाव नहीं है। इसका प्रयोग न करें! नीचे दिए गए उदाहरणों की तरह HTTP हेडर से सेटिंग करके ही एक्स-फ्रेम-ऑप्शंस काम करेंगे। developer.mozilla.org/fr/docs/Web/HTTP/Headers/X-Frame-Options
होसम एलजैग

जवाबों:


102

आप इसे सर्वर की तरफ से नहीं देख सकते, लेकिन पेज लोड होने के बाद इसका पता लगाने के लिए आप जावास्क्रिप्ट का उपयोग कर सकते हैं। तुलना करें topऔर self, यदि वे समान नहीं हैं, तो आप एक फ्रेम में हैं।

इसके अतिरिक्त, कुछ आधुनिक ब्राउज़र X-FRAME-OPTIONSहेडर का सम्मान करते हैं , जिसमें दो मूल्य हो सकते हैं:

  • DENY - यदि फ्रेम में समाहित है तो पृष्ठ को रेंडर होने से रोकता है
  • SAMEORIGIN - ऊपर के समान, जब तक कि पृष्ठ शीर्ष-स्तरीय फ़्रेमसेट धारक के समान डोमेन का न हो।

उपयोगकर्ताओं में Google का पिकासा शामिल है, जिसे एक फ्रेम में एम्बेड नहीं किया जा सकता है।

न्यूनतम संस्करण के साथ हेडर का समर्थन करने वाले ब्राउज़र:

  • IE8 और IE9
  • ओपेरा 10.50
  • सफ़ारी ४
  • क्रोम 4.1.249.1042
  • फ़ायरफ़ॉक्स 3.6.9 ( NoScript के साथ पुराने संस्करण )

2
जब से मैं एक गूगल खोज के माध्यम से यहाँ में ठोकर खाई, मैं जोड़ देंगे कि फ़ायरफ़ॉक्स जोड़ा FF3.6.9 साथ अगस्त 2010 में एक्स फ़्रेम-विकल्पों: michael-coates.blogspot.com/2010/08/...
ThePants


44

Stackoverflow में इसे परीक्षण करने के लिए कुछ JS शामिल हैं ( master.js)। यह इसका प्रासंगिक हिस्सा है:

if(top!=self){
    top.location.replace(document.location);
    alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}

लेकिन ध्यान रखें कि जेएस को निष्क्रिय किया जा सकता है।


यह दृष्टिकोण विशेष रूप से उपयोगी है यदि आप या तो उस व्यक्ति को एक संदेश प्राप्त करना चाहते हैं जो आपकी सामग्री को iframe में डाल रहा है, या उनकी साइट का अंतिम उपयोगकर्ता जो iframe में आपकी सामग्री देख रहा है।
केविनमीक

30

के लिए आधुनिक ब्राउज़रों , आप सीएसपी (सामग्री सुरक्षा नीति) है, जो एक मानक है उपयोग कर सकते हैं। निम्नलिखित हेडर दस्तावेज़ को कहीं भी एक फ्रेम में लोड करने से रोकेगा:

Content-Security-Policy: frame-ancestors 'none'

(IE 11 को X-उपसर्ग की आवश्यकता है , हालांकि)। आप 'none'उस मूल में भी बदल सकते हैं जिस पर फ्रेमिंग की अनुमति है, जैसे कि आपकी अपनी साइट।

पुराने ब्राउज़रों को कवर करने के लिए, यह @ Maerlyn के उत्तर के साथ सबसे अच्छा उपयोग किया जाता है ।


1
आपका जवाब सभी उचित सम्मान के साथ पर्याप्त नहीं है। क्या यह हेडर कोड या PHP है? उदाहरण के लिए।
गैरी कार्लाइल कुक

2
@GaryCarlyleCook यह एक HTTP हेडर है जो पेज की सेवा करते समय ब्राउज़र की प्रतिक्रिया का हिस्सा होना चाहिए। यह PHP कोड नहीं है, हालांकि आप इसे भेजने के लिए PHP का उपयोग कर सकते हैं; हेडर
rvighne

15

आप जावास्क्रिप्ट के साथ एक iframe में आप पृष्ठ लोड करने से रोक सकते हैं

<script type="text/javascript">
if ( window.self !== window.top ) {
    window.top.location.href=window.location.href;
}
</script>

यह कोड आपके पृष्ठ के iframe के कंटेनर का पता आपके पृष्ठ पते पर बदल देता है और आपके पृष्ठ को दिखाने के लिए कंटेनर को मजबूर करता है।


1
sandboxआइफ्रेम पर विशेषता इस तरह के फ्रेमिंग से बचने के लिए हैक करने से मना करती है। तो इस तरह से एक सुरक्षित तरीका नहीं है फ्रैमिंग को रोकने का, अगर आपकी चिंता सुरक्षा की समस्या है।
Frédéric

6

या आप किसी विशिष्ट डोमेन को अवरुद्ध कर सकते हैं यदि आप कुछ स्थानों पर अपनी सामग्री का समर्थन नहीं करते हैं, लेकिन इसे किसी निश्चित साइट पर नहीं चाहते हैं। उदाहरण के लिए, यदि offendingdomain.comआप अपनी सामग्री को एम्बेड कर रहे हैं, तो आप ऐसा कर सकते हैं:

<script type="text/javascript">
    if(document.referrer.indexOf("offendingdomain.com") != -1) {
        window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
    }
</script>

यह मूल दस्तावेज़ के स्थान की जाँच करेगा और देखेगा कि क्या यह offendingdomain.comआपकी सामग्री को एम्बेड कर रहा है। यह स्क्रिप्ट सजा के रूप में एक निश्चित प्रसिद्ध यूट्यूब वीडियो के लिए उस iframe भेज देगा। वास्तव में वे सिर्फ रिक-रोल्ड थे।


3

जाँच करने के लिए जावास्क्रिप्ट का उपयोग करें कि क्या यह आपकी php फ़ाइल के अंत में निम्नलिखित स्क्रिप्ट रखकर iframe पर लोड किया गया था और एक पृष्ठ पर रीडायरेक्ट करता है जो चेतावनी प्रदर्शित करता है या नोटिस करता है कि आपका पेज iframe का उपयोग करके लोड नहीं किया जाना चाहिए।

<script type="text/javascript">
if(top.location != window.location) {
    window.location = '/error_iframe.php';
}
</script>

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