Як я можу дізнатися, що моя сторінка вбудована як кадр на інший сайт під час завантаження сторінки? Я думаю, заголовок запиту реферала не може мені тут допомогти? Дякую.
Як я можу дізнатися, що моя сторінка вбудована як кадр на інший сайт під час завантаження сторінки? Я думаю, заголовок запиту реферала не може мені тут допомогти? Дякую.
Відповіді:
Ви не можете перевірити це з боку сервера, але ви можете використовувати javascript для його виявлення після завантаження сторінки. Порівняйте top
і self
, якщо вони не однакові, ви потрапляєте в кадр.
Крім того, деякі сучасні браузери поважають X-FRAME-OPTIONS
заголовок, який може мати два значення:
Користувачі включають Picasa від 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.")
}
Але майте на увазі, що JS можна відключити.
Для сучасних браузерів ви можете використовувати CSP (Політика безпеки вмісту), яка є стандартом. Наступний заголовок не дозволить документу завантажуватися у фрейм де завгодно:
Content-Security-Policy: frame-ancestors 'none'
( X-
Однак IE 11 потребує префікса). Ви також можете змінити 'none'
джерело, для якого дозволено обрамлення, наприклад, власний сайт.
Щоб охопити старіші браузери, це найкраще використовувати разом із відповіддю @ Maerlyn .
ви можете запобігти завантаженню вашої сторінки в iframe за допомогою javascript
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
цей код змінює адресу контейнера iframe вашої сторінки на адресу вашої сторінки та примушує контейнер відображати вашу сторінку.
sandbox
атрибут на iframe дозволяє заборонити подібні кадри, що уникають хаків. Отже, цей спосіб не є захищеним способом запобігти обрамленню, якщо ваша проблема стосується питань безпеки.
Або ви можете заблокувати певний домен, якщо ви не заперечуєте проти вашого вмісту в деяких місцях, але не хочете його на певному сайті. Наприклад, якщо ви 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 до певного відомого відео YouTube для покарання. Фактично вони просто самі себе Рік-Ролл.
Використовуйте javascript, щоб перевірити, чи завантажено його у iframe, розмістивши наступний скрипт у кінці вашого php-файлу та переспрямувавши на сторінку, на якій відображається попередження або повідомлення про те, що вашу сторінку не слід завантажувати за допомогою iframe.
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>
<?php
header("Content-Security-Policy: frame-ancestors 'none'");
?>