Откуда был загружен 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