Intereting Posts
preg_replace + UTF-8 не работает на одном сервере, но работает на другом JQuery / AJAX: загрузка внешних DIV с использованием динамического содержимого Как преобразовать все данные div в изображение и сохранить его в каталог без использования холста? Обновление PHP XSLT-процессора до XSLT 2.0 Как отправить URL-адрес в параметре маршрута? Почему я не получаю ошибку «заголовки уже отправлены»? PHP Twitter Hashtag Search не показывает результаты в синтаксическом анализе, но данные присутствуют в массиве Исходное шифрование PHP – эффективность и недостатки postgresql эквивалентно $ mysqli-> insert_id Опубликовать на странице через Facebook API Книга или учебник о безопасном управлении пользователями и привилегиях Получение междоменных данных php Перенос файла для загрузки через SFTP с очень медленным PHP Измените HTML и PHP с помощью preg_replace Извлечение последнего сегмента в URI

Как предотвратить загрузку страницы моего сайта через сторонний фрейм сайта iFrame

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

Вы не можете проверить его со стороны сервера, но вы можете использовать javascript для его обнаружения после загрузки страницы. Сравните top и « self , если они не идентичны, вы находитесь в кадре.

Кроме того, некоторые современные браузеры рассматривают заголовок X-FRAME-OPTIONS , который может иметь два значения:

  • DENY – предотвращает отображение страницы, если она содержится в кадре
  • 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' 

(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>