Как предотвратить мою страницу сайта должны быть загружены через 3-й партии сайте рамку элемента iframe
Как я могу узнать, что моя страница встроена в качестве фрейма на другой сайт во время загрузки страницы? Я думаю, заголовок запроса реферера не может мне помочь здесь? Спасибо.
6 ответов:
вы не можете проверить его с сервера, но вы можете использовать JavaScript, чтобы обнаружить его после загрузки страницы. Сравните
top
иself
, если они не идентичны, вы находитесь в рамку.кроме того, некоторые современные браузеры уважать , который может иметь два значения:
- запретить-предотвращает отображение страницы, если она содержится в кадре
- SAMEORIGIN-то же самое, что и выше, если страница не принадлежит к тому же домену, что и держатель набора кадров верхнего уровня.
пользователи включают Picasa Google, которые не могут быть встроены в кадр.
- браузеры, которые поддерживают заголовок, с минимальная версия:
- IE8 и IE9
- Опера 10.50
- Safari 4
- Chrome 4.1.249.1042
- Firefox 3.6.9 (более старые версии с NoScript)
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'
(т. е. 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
это встраивание вашего контента. Этот скрипт затем отправит этот iframe на определенное известное видео youtube в качестве наказания. По сути, они просто Рик-катались сами.
используйте javascript, чтобы проверить, если он был загружен на iframe, поместив следующий скрипт в конце вашего php-файла и перенаправить на страницу, которая отображает предупреждение или уведомление о том, что ваша страница не должна быть загружена с помощью iframe.
<script type="text/javascript"> if(top.location != window.location) { window.location = '/error_iframe.php'; } </script>