Что именно IFrame может делать с объектом top.Location (междоменный)? - PullRequest
19 голосов
/ 11 июля 2009

В междоменных политиках существует особый крайний случай в отношении объекта window.top.Location ...

Допустим, у меня есть IFrame A в домене www.bbb.com, который живет внутри страницы в домене www.aaa.com.

Страница внутри IFrame может:

  • Сравнить window.top.location с window.location (чтобы определить, в рамке ли он)
  • Вызовите window.top.location.replace (window.location) для перенаправления на себя
  • Вызовите window.top.location.replace («любая произвольная строка») для перенаправления в другое место

Но он не может:

  • Alert, Document.Write или любой вид вывода window.top.location.href
  • Объединить его в любую другую переменную или использовать любым другим полезным способом
  • Вызовите window.top.location.reload ()

Это только те, которые я мог быстро найти. Я уверен, что есть и другие крайние случаи.
Похоже, что браузер не позволяет использовать объект top.location, если top находится в другом домене, за исключением для нескольких вещей из белого списка ...

Это где-нибудь задокументировано?
Могу ли я найти, что это за белые списки?
Это в стандарте HTML и реализовано одинаково во всех браузерах? Или это реализация полуслучайная?

Ответы [ 2 ]

8 голосов
/ 03 октября 2013

Это точно указано стандартом HTML5 в разделе 5.5.3.1 .

6 голосов
/ 11 июля 2009

Правила безопасности отличаются в зависимости от версии браузера. Как правило, более новые версии имеют более строгие правила, но также и более точно настроенные.

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

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

...