Как предотвратить мою страницу сайта должны быть загружены через 3-й партии сайте рамку элемента iframe


Как я могу узнать, что моя страница встроена в качестве фрейма на другой сайт во время загрузки страницы? Я думаю, заголовок запроса реферера не может мне помочь здесь? Спасибо.

6 62

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>