Проверьте, находится ли сайт внутри iframe - PullRequest
24 голосов
/ 12 июля 2011

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

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

Ответы [ 4 ]

41 голосов
/ 12 июля 2011

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


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

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

  1. $ _ SERVER [ 'HTTP_REFERER']:

Вы можете проверить рекомендателя, чтобы определить, поступил ли запрос с 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 и принять необходимые меры.

7 голосов
/ 12 июля 2011

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

3 голосов
/ 12 июля 2011

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

1 голос
/ 26 октября 2014
<?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') {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...