मुझे कैसे पता चलेगा कि पेज लोडिंग के दौरान मेरा पेज दूसरी साइट पर फ्रेम के रूप में एम्बेडेड है? मुझे लगता है कि रेफरर अनुरोध हेडर यहां मेरी मदद नहीं कर सकता है? धन्यवाद।
मुझे कैसे पता चलेगा कि पेज लोडिंग के दौरान मेरा पेज दूसरी साइट पर फ्रेम के रूप में एम्बेडेड है? मुझे लगता है कि रेफरर अनुरोध हेडर यहां मेरी मदद नहीं कर सकता है? धन्यवाद।
जवाबों:
आप इसे सर्वर की तरफ से नहीं देख सकते, लेकिन पेज लोड होने के बाद इसका पता लगाने के लिए आप जावास्क्रिप्ट का उपयोग कर सकते हैं। तुलना करें topऔर self, यदि वे समान नहीं हैं, तो आप एक फ्रेम में हैं।
इसके अतिरिक्त, कुछ आधुनिक ब्राउज़र X-FRAME-OPTIONSहेडर का सम्मान करते हैं , जिसमें दो मूल्य हो सकते हैं:
उपयोगकर्ताओं में Google का पिकासा शामिल है, जिसे एक फ्रेम में एम्बेड नहीं किया जा सकता है।
न्यूनतम संस्करण के साथ हेडर का समर्थन करने वाले ब्राउज़र:
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.")
}
लेकिन ध्यान रखें कि जेएस को निष्क्रिय किया जा सकता है।
के लिए आधुनिक ब्राउज़रों , आप सीएसपी (सामग्री सुरक्षा नीति) है, जो एक मानक है उपयोग कर सकते हैं। निम्नलिखित हेडर दस्तावेज़ को कहीं भी एक फ्रेम में लोड करने से रोकेगा:
Content-Security-Policy: frame-ancestors 'none'
(IE 11 को X-उपसर्ग की आवश्यकता है , हालांकि)। आप 'none'उस मूल में भी बदल सकते हैं जिस पर फ्रेमिंग की अनुमति है, जैसे कि आपकी अपनी साइट।
पुराने ब्राउज़रों को कवर करने के लिए, यह @ Maerlyn के उत्तर के साथ सबसे अच्छा उपयोग किया जाता है ।
आप जावास्क्रिप्ट के साथ एक iframe में आप पृष्ठ लोड करने से रोक सकते हैं
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
यह कोड आपके पृष्ठ के iframe के कंटेनर का पता आपके पृष्ठ पते पर बदल देता है और आपके पृष्ठ को दिखाने के लिए कंटेनर को मजबूर करता है।
sandboxआइफ्रेम पर विशेषता इस तरह के फ्रेमिंग से बचने के लिए हैक करने से मना करती है। तो इस तरह से एक सुरक्षित तरीका नहीं है फ्रैमिंग को रोकने का, अगर आपकी चिंता सुरक्षा की समस्या है।
या आप किसी विशिष्ट डोमेन को अवरुद्ध कर सकते हैं यदि आप कुछ स्थानों पर अपनी सामग्री का समर्थन नहीं करते हैं, लेकिन इसे किसी निश्चित साइट पर नहीं चाहते हैं। उदाहरण के लिए, यदि 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 भेज देगा। वास्तव में वे सिर्फ रिक-रोल्ड थे।
जाँच करने के लिए जावास्क्रिप्ट का उपयोग करें कि क्या यह आपकी php फ़ाइल के अंत में निम्नलिखित स्क्रिप्ट रखकर iframe पर लोड किया गया था और एक पृष्ठ पर रीडायरेक्ट करता है जो चेतावनी प्रदर्शित करता है या नोटिस करता है कि आपका पेज iframe का उपयोग करके लोड नहीं किया जाना चाहिए।
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>
<?php
header("Content-Security-Policy: frame-ancestors 'none'");
?>