Как я могу узнать, что моя страница встроена в кадр на другой сайт во время загрузки страницы? Я думаю, что заголовок запроса referrer не может помочь мне здесь? Благодарю.
Как предотвратить загрузку страницы моего сайта через сторонний фрейм сайта iFrame
Ответ 1
Вы не можете проверить его со стороны сервера, но вы можете использовать javascript для его обнаружения после загрузки страницы. Сравните top
и self
, если они не идентичны, вы находитесь в кадре.
Кроме того, некоторые современные браузеры относятся к заголовку X-FRAME-OPTIONS
, который может иметь два значения:
- DENY - предотвращает отображение страницы, если она содержится в кадре
- SAMEORIGIN - то же самое, что и выше, если только страница не принадлежит к тому же домену, что и держатель фреймов верхнего уровня.
Пользователи включают Google Picasa, которые не могут быть встроены в фрейм.
Браузеры, поддерживающие заголовок, с минимальной версией:
- IE8 и IE9
- Opera 10.50
- Safari 4
- Chrome 4.1.249.1042
- Firefox 3.6.9 (более старые версии с NoScript)
Ответ 2
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 может быть отключен.
Ответ 3
Для современных браузеров вы можете использовать CSP (Политика безопасности контента), которая является стандартом. Следующий заголовок предотвратит загрузку документа в кадре в любом месте:
Content-Security-Policy: frame-ancestors 'none'
(IE 11 нуждается в префиксе X-
, хотя). Вы также можете изменить 'none'
на начало координат, на котором разрешено создание рамки, например ваш собственный сайт.
Чтобы охватить старые браузеры, это лучше всего использовать вместе с @Maerlyn answer.
Ответ 4
вы можете предотвратить загрузку своей страницы в iframe с помощью javascript
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
этот код изменит адрес контейнера вашей страницы iframe на ваш адрес страницы и заставит контейнер отображать вашу страницу.
Ответ 5
Или вы можете заблокировать определенный домен, если вы не против своего контента в некоторых местах, но не хотите его на определенном сайте. Например, если 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
, который встраивает ваш контент. Этот script затем отправит этот iframe в известное видео youtube как наказание. По сути, они просто Рик-Роллинг сами.
Ответ 6
Используйте javascript, чтобы проверить, была ли она загружена в iframe, поместив в конце вашего php файла следующий script и перенаправляя страницу, на которой отображается предупреждение или уведомление о том, что ваша страница не должна загружаться с использованием iframe.
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>