Почему Iframe не работает на yahoo.com

Я считаю, что это не работает:

<iframe src="http://www.yahoo.com"> </iframe>

Я прочитал этот вопрос, но я не понимаю, что они имеется в виду добавить:

<?php
header('X-Frame-Options: GOFORIT'); 
?>

Я попытался добавить это в начало моего html-файла (конечно, изменить его на php-файл), и мой php-файл стал таким:

<?php
header('X-Frame-Options: GOFORIT'); 
?>
<iframe src="http://www.yahoo.com"> </iframe>

Я запускаю его в своем приложении (с php 5.2.6), и он не работает. Может ли кто-нибудь объяснить, что я должен сделать, чтобы преодолеть это?


person Sayakiss    schedule 18.05.2013    source источник


Ответы (4)


Вам не повезло: yahoo.com не позволяет встраивать их сайт в iframe. Как и facebook или другие популярные сайты.

Причиной этого ограничения является кликджекинг.

Вы можете убедиться в этом, проверив заголовки ответов на их сайте; они указывают X-Frame-Options:SAMEORIGIN, что означает, что только yahoo.com может встраивать страницы yahoo.com.

Некоторые старые браузеры не будут применять заголовок, но все новые будут. Афаик, нет простого способа обойти это.

Единственное решение, которое я могу придумать, — это реализовать прокси-скрипт, т. е. вы встраиваете скрипт, который живет на вашем сервере и получает удаленный контент для вас.

Например. ваш iframe вызывает "/my-proxy.php?url=http://www.yahoo.com/", и этот скрипт будет выглядеть нравится:

<?php

header('X-Frame-Options: SAMEORIGIN'); // don't allow other sites to use my proxy
echo file_get_contents($_GET['url']);

Ваш пробег может отличаться...

person jmlnik    schedule 18.05.2013
comment
вроде работает! Я проверю это еще ... Если в последующем тесте не возникнет проблем, вы получите 200 репутации, как я и обещал. - person Sayakiss; 18.05.2013
comment
Coursera.org обслуживается через HTTPS. Скорее всего, вам просто нужно включить/установить расширение php_openssl, чтобы оно заработало. - person jmlnik; 18.05.2013
comment
Stackoverflow использует javascript для предотвращения встраивания iframe. к вашему сведению, это не хорошее решение. Хорошее решение — вообще избегать iframe: ux. stackexchange.com/questions/4934/ - person jmlnik; 18.05.2013
comment
Сайты могут по-разному предотвращать фреймы. Некоторые используют заголовки (например, yahoo), а другие используют javascript (например, stackoverflow). Хотя существуют способы обойти каждый из них с помощью прокси-серверов и переписывания кода с использованием регулярных выражений, это ужасно плохая практика. Для тривиального примера моего прокси-решения достаточно, но это все. Извините, для вас нет лучшего решения. Не стесняйтесь открывать новый/более конкретный вопрос. - person jmlnik; 18.05.2013

У вас возникли проблемы с совместным использованием ресурсов между источниками. Прочитайте эти Wikipedia CORS и статьи MDN CORS.

Что касается вашего фрагмента,

<?php
  header('X-Frame-Options: GOFORIT'); 
?>

необходимо добавить на обслуживаемую страницу, а не на страницу/код, запрашивающий ее, что в данном случае будет yahoo.com. Но так как вы не обслуживаете yahoo.com сами, добавить его невозможно.

Однако если вопрос касался ваших собственных страниц, а yahoo.com был просто примером, вы можете просто установить правильные заголовки HTTP, как указано в статьях, и все будет хорошо.

person Community    schedule 18.05.2013

Некоторые веб-сайты, такие как google, yahoo, отключили встраивание iframe для своего сайта. Если вы хотите сделать это, возьмите их html, используя curl или file_get_conents на стороне сервера, и покажите его.

проверьте заголовок ответа HTTP X-Frame-Option. Я думаю, что для yahoo это должно быть deny или sameorigin, что означает, что только страница yahoo может встраивать другие свои страницы в iframe.

person Manish Jangir    schedule 18.05.2013

Добавьте плагин «Игнорировать заголовки X-Frame» в google chorme, после чего он будет работать нормально.

person user2587116    schedule 10.09.2016
comment
Неразумно просить об этом каждого посетителя вашего сайта. - person Quentin; 10.09.2016