2016-11-30 15 views
0

Я пытаюсь понять одну и ту же политику происхождения в деталях. С этой целью я попытался понять, как это работает с кодом (я полный noob в веб-разработке), поэтому я запустил Flask-сервер и создал домен local.com и субдомен store.local.com. Затем на странице store.html субдомена я создал iframe с src=http://local.com - без изменения document.domain недвижимости в любом виде, как указано here.Такая же политика происхождения, казалось бы, не работает

Теперь, из того, что я прочитал, я не могу это проиграть, но вместо этого он правильно показывает содержимое супердомена index.html. Я повторил эксперимент с двумя доменами на двух разных физических компьютерах, но это ничего не изменило. (Я пробовал как Firefox, так и Chrome)

Теперь я также пробовал с src=http://google.com, и это действительно останавливается на SOP. Так что в настоящий момент я в глубокой неразберихе, может ли кто-нибудь помочь мне понять это? Благодарю.

+0

Мне кажется, что SOP разрешает доступ к различным поддоменам в одном домене. Где store.local.com - тот же домен, что и local.com, а google.com - полностью отдельный домен. – vbguyny

+1

такая же политика происхождения немного отличается, когда дело доходит до iframes. По умолчанию разрешено * отображать * страницу в iframe, однако они не могут общаться без сотрудничества. Однако страница в iframe не позволяет отображать указанную страницу в iframe. –

ответ

1

IFrame обычно освобождаются от той же политики происхождения.

Однако, если вы посмотрите на заголовки ответа HTTP при вызове http://google.com, вы увидите следующий заголовок:

x-frame-options:SAMEORIGIN 

Это явно tells your browser that it should prevent the page from being displayed across origins.


MDN describes this particular behavior:

Вот некоторые примеры ресурсов, которые могут быть встроены перекрестным происхождение:

[...]

  • Все, что с <frame> и . Сайт может использовать заголовок X-Frame-Options, чтобы предотвратить эту форму взаимодействия с кросс-началом.
+0

Спасибо. Не могли бы вы предложить мне, как сделать рабочий пример той же политики происхождения? Это, наверное, легкая вещь, но как я могу получить javascript на странице, чтобы попытаться получить доступ к dom другому? – ClonedOne

+0

DOM существует только в вашем браузере. Вы можете сделать HTTP-вызов для URL-адреса, который подпадает под SOP, и вы должны столкнуться с сообщением об ошибке, которое вы ищете. Изучите [XMLHttpRequests] (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest)! – Timo