предотвратить изменение родительского местоположения в iframe - PullRequest
3 голосов
/ 30 марта 2012

Предположим, http://a.com/foo содержит <iframe src="http://b.com/bar">

Иногда b.com/bar выходит из своего кадра: окно верхнего уровня перенаправляется с a.com/foo на b.com/bar. Я не знаю, как это делает b.com.

Я думал, что междоменный iframe не может вмешиваться в родительский процесс, если родительский элемент не взаимодействует через postMessage. Освобождается ли от этого изменение расположения окна?

Если это то, что происходит, как a.com может предотвратить это перенаправление? Я управляю a.com, но не могу изменить b.com.

Если это не то, что происходит, как я могу узнать, что b.com делает для достижения перенаправления?

Было бы приемлемо заставить b.com загрузить себя в новое окно или саботировать доступ к объектам top или parent. Другие ухудшения поведения b.com могут быть приемлемыми.

Ответы [ 4 ]

1 голос
/ 02 февраля 2017

Родитель может использовать атрибут sandbox для iframe:
http://www.w3schools.com/TAgs/att_iframe_sandbox.asp

Тогда iframe больше не сможет перенаправлять родителя.

0 голосов
/ 30 марта 2012

это называется "разбор кадра".Предположительно, существуют способы остановить это (http://seclab.stanford.edu/websec/framebusting/index.php).

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

0 голосов
/ 30 марта 2012

Решение ajax может работать, если я создам a.com/proxy.php, который будет использовать cURL для получения b.com.

Плюсы:

  • может изменить или удалить любой скрипт
  • может корректировать контент b.com (режим предварительного просмотра)
  • может обойти ограничения междоменного iframe

Минусы:

  • куки / сессиина b.com будет недоступно
  • b.com может потребоваться сценарии для создания своего контента
  • нагрузка на пропускную способность
  • усилия по кодированию, чтобы заставить работать hrefs
0 голосов
/ 30 марта 2012

Может случиться так, что ссылка внутри b.com имеет атрибут Target = '_ parent'. Это сделает обновление окна / iframe родительским.

Если вы контролируете b.com - убедитесь, что все ваши цели - _self.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...