@newaitix

Как узнать откуда был загружен iframe?

Есть код iframe
<!DOCTYPE html>
<html lang="en">
<head>
	<script>if(window==window.top)window.stop();</script>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	текст
</body>
</html>

Предполагается что он будит встраиваться в качестве iframe на страницы.
Но нужно ограничить возможность встраивания.
Запретить всем ресурсам встраивать iframe
А facebook.com и google.com разрешить встраивать этот iframe
if(window.top.document.location.href=!'google.com') // не работает
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
@granty
Откуда был загружен iframe никак не узнать (узнать-то можно, но в вашем случае это не поможет).

1. яваскрипт не сработает, тк политика «Одинакового источника» (Same Origin Policy) запрещает доступ из ифрейма к window.top.location.href, если они имеют разные происхождения (грубо говоря - разные домены).
Проверить window.top != window.self браузер даёт, а доступ к фактическому url из window.top - нет.

2. на сервере проверять переменную $_SERVER['HTTP_REFERER'] (кто запросил загрузку страницы) смысла тоже нет - если у ифрейма установлен атрибут referrerpolicy:
<iframe referrerpolicy='no-referrer'>
реферер не будет прислан (будет, но только в IE/Edge и Safari_IOS).


Но сделать то, что вы хотите - можно легко. На странице надо издать HTTP-заголовок CSP с директивой frame-ancestors:
header( "Content-Security-Policy: frame-ancestors https://ваш_сайт.ru http://ваш_сайт.ru https://www.facebook.com https://facebook.com https://www.google.com https://google.com;" );

это разрешит открывать эту страницу в ифрейме с собственного домена ваш_сайт.ru(без поддоменов!) по http:/https:.
И сайтам facebook.com и google.com с www или без (но только если фэйсбук/гугль загружены по https: - а их и невозможно загрузить по http:).

PS: если ваш сайт доступен и по www - добавьте в "волшебную" строку:
https://www.ваш_сайт.ru http://www.ваш_сайт.ru
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight Куратор тега JavaScript
https://sitecoder.blogspot.com
Это делается ни в клиентском js, а в проверке заголовка REFERRER на стороне сервера.
Например, $_SERVER["DOCUMENT_REFERRER"] в PHP.
Или правилами mod_rewrite в apache.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы