Как я могу узнать, что моя страница встроена в кадр на другой сайт во время загрузки страницы? Я думаю, что заголовок запроса referrer не может помочь мне здесь? Благодарю.
Вы не можете проверить его со стороны сервера, но вы можете использовать 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), который является стандартом. Следующий заголовок предотвратит загрузку документа в кадр в любом месте:
Content-Security-Policy: frame-ancestors 'none'
(IE 11 нуждается в X-
префиксе, хотя). Вы также можете изменить 'none'
на начало координат, на котором разрешено создание рамки, например, ваш собственный сайт.
Чтобы охватить старые браузеры, это лучше всего использовать вместе с ответом @ Maerlyn .
вы можете предотвратить загрузку своей страницы в iframe с помощью javascript
<script type="text/javascript"> if ( window.self !== window.top ) { window.top.location.href=window.location.href; } </script>
этот код изменит адрес контейнера 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
, является ли это offendingdomain.com
который встраивает ваш контент. Этот скрипт затем отправит этот iframe в известное видео youtube как наказание. По сути, они просто Рик-Роллинг сами.
Используйте javascript, чтобы проверить, была ли она загружена в iframe, поместив следующий скрипт в конец вашего php-файла и перенаправляя страницу, на которой отображается предупреждение или уведомление о том, что ваша страница не должна загружаться с использованием iframe.
<script type="text/javascript"> if(top.location != window.location) { window.location = '/error_iframe.php'; } </script>