2014-12-17 4 views
4

У меня есть два домена:Почему iframe может изменить URL родительского окна из другого домена?

sub1.domain.org содержит IFRAME с его Src, указывающей на другой: sub2.domain.org

На sub2:

//triggers a cross-domain security error 
alert(window.parent.location.href); 

//executes just fine on FF, IE, Chrome, and Safari. 
window.parent.location.href = new_url; 

Так кажется я 'm разрешено писать на URL родительского окна, но мне не разрешено читать его. Это действительно стандарт? Мне просто нужно знать, почему это работает так, как есть.

Я нашел один ответ здесь: Why can a child redirect a parent frame?

та же политика происхождения не применяется здесь, либо. Изменив URL-адрес в адресной строке вашего браузера, вы также измените свойство window.top.location.href объекта . Если бы существовали ограничения на то же происхождение , интернет был бы мертв. Вы не отправляете запрос в другое место, вы не получаете данные от стороннего ресурса и загружаете его на свою страницу, вы перенаправляете браузер в другое место, которое закрывает и очищает DOM.

Но этот ответ подсказывает другие последующие вопросы.

Когда мы меняем URL-адрес родителя, разве мы по-прежнему технически модифицируем DOM родителя (даже если он его закрывает) и, следовательно, нарушают политику одного и того же происхождения?

Как именно был бы мертв в Интернете, если бы применялась такая же политика происхождения? Разумеется, мы можем различать вручную вводить URL-адреса в адресной строке, изменяя их с помощью скриптов в отдельных доменах.

Я понимаю, что этот случай не нарушает политику одного и того же происхождения, но я все еще пытаюсь понять, почему именно. Может ли кто-нибудь пролить дополнительную информацию о том, почему это разрешено?

+0

Прошу извинить меня за то, что я как бы идиот, который слишком долго менял слишком много, но действительно ли это считается межсайтовым сценарием, если домен тот же (domain.org из примера выше)? Я имею в виду, что я понимаю, что субдомены просто сопоставляются с IP-адресами, но собственность не может быть разделена. Кто владеет сайтом sub1.domain.org, также имеет право собственности на sub2.domain.org в 100% случаев? Я согласен с тем, что ваш отчет о том, что вы не читаете его, кажется глупым, в этом случае я предполагаю, что ошибка чтения является ложным отрицательным и должна быть изменена. Возможно, я ошибаюсь в отношении законности продажи субдоменов. –

ответ

0

Это не проблема безопасности для iframe, чтобы изменить URL-адрес родительского окна. Это просто загружает новую страницу в родительское окно (таким образом убивая iframe, который содержался в исходном родителе). Там нет проблемы с безопасностью.

IFrame из другого источника (как вы заметили) не имеет права доступа к содержимому родителя, поскольку это может быть проблемой безопасности.

FYI, верно и обратное. Родительский фрейм может создать iframe и установить его .src на все, что он хочет, включая другие домены, но не может получить доступ к загружаемому контенту. Основная проблема здесь заключается в том, что проблема безопасности не отображать контент из других доменов, но может быть проблемой безопасности для доступа к фактическому содержимому из другого источника. Таким образом, вам обычно разрешено отображать все, что угодно, просто не получайте доступ к нему.

FYI, возможность определить, были ли вы созданы в рамке и «выкинуть» из кадра, сбросив исходный URL-адрес родительского окна, называется «перебор кадров», и считается правообладателем контента, чтобы решить, они могут быть обрамлены или нет, или кто может быть обрамлен. Теперь есть более новые элементы управления, которые определяют, может ли сайт быть обрамлен или нет, поэтому фрейм-бэстинг не требуется в новых браузерах.

Смежные вопросы