Проверьте, находится ли сайт внутри iframe


Кто-нибудь знает, можно ли проверить, находится ли сайт внутри iframe с помощью PHP.

Я знаю, что это возможно с помощью javascript, но я не смог найти ни одного примера с PHP?

 23
Author: jsims281, 2011-07-12

4 answers

PHP никогда не находится в iframe. PHP выполняется на стороне сервера и генерирует выходные данные, такие как HTML, Javascript или текст. Выходные данные, сгенерированные PHP, могут создаваться или находиться внутри iframe, но никогда не сам PHP.


ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Что касается дополнительной информации, которую вы добавили в комментариях (что вы хотите различать запросы непосредственно на ваш сайт и запросы через приложение Facebook), есть несколько способов, которые вы можете использование:

  1. $ _SERVER['HTTP_РЕФЕРЕР']:

Вы можете проверить реферера, чтобы определить, пришел ли запрос с URL-адреса Facebook, с другой страницы на вашем собственном сайте, с сайта третьей стороны или это был прямой трафик. Этот метод не является надежным, но может предоставить больше информации, чем в настоящее время получает ваше приложение.

  1. Отдельные URL-адреса

Вы можете создать отдельные URL-адреса для приложения, запущенного на вашем сайте, и Версия для Facebook. Используя $_SERVER['REQUEST_URI'], вы можете легко определить, был ли доступ к вашему приложению через'yoursite.com/fbapp "или"yoursite.com/localapp ". Оба URL-адреса могут ссылаться на одни и те же сценарии с помощью Apache mod_rewrite или решения для псевдонимов по вашему выбору.

  1. Параметры URL-адреса

Этот метод, возможно, самый простой в реализации. Если вы можете указать параметры URL-адреса при предоставлении URL-адреса приложения Facebook, просто добавьте параметр. Для пример:

?access_method=facebook

В PHP вы можете легко проверить наличие и значение параметра access_method и предпринять необходимые действия.

 39
Author: George Cummins, 2015-03-29 00:48:06

Нет, PHP - это серверная часть. У него нет возможности узнать, находится ли он в iframe.

 7
Author: i.am.michiel, 2011-07-12 10:12:24

Вы можете проверить наличие $_SERVER['HTTP_REFERER']. Этому на самом деле нельзя доверять, потому что браузеры не всегда предоставляют эту информацию. Также HTTP_REFERER не всегда означает iframe, но для конкретных случаев это хорошо.

 3
Author: Karolis, 2011-07-12 10:22:14
<?php
if(!$_SERVER['HTTP_REFERER'] == 'YourFrameURL') {
    // Site is NOT loaded from iframe
    die('Please load this page from YourFrameURL');
}
else {
    // Site IS loaded from iframe: display content
?>

Пожалуйста, обратите внимание, что $_SERVER['HTTP_REFERER'] абсолютно ненадежен: его можно изменить. Также обратите внимание, что этот метод "чувствителен к https". Если кадр загружен из https://x, в то время как YourFrameURL имеет значение http://x, он не будет работать. Исправьте это с помощью:

if(!$_SERVER['HTTP_REFERER'] == 'http://YourFrameURL' or !$_SERVER['HTTP_REFERER'] == 'https://YourFrameURL') {
 1
Author: William Edwards, 2014-10-26 08:21:48