У меня есть iframe, встроенный в сторонние сайты, и я хочу, чтобы эти сайты могли общаться с указанным iframe через postMessage
.Я хотел бы ограничить источник, который может взаимодействовать с iframe, источником источника (создания экземпляра) веб-страницы.В настоящее время я достигаю этого, просто добавляя источник в iframe следующим образом:
<iframe src = "https://whatever.com/iframe?host=${window.location.href}" />
Однако я хотел бы отойти от этого метода по причинам, которые выходят за рамки этого вопроса.Поэтому я рассматривал возможность проверки сообщения с помощью комбинации window.parent
и ducument.referrer
.Что-то вроде:
const originatingOrigin = parse(document.referrer).origin;
document.addEventListener("message", function (message)
{
if (message.origin !== originatingOrigin || window.parent !== message.source)
return;
});
Является ли это 1) столь же безопасным, как когда я передавал URL-адрес в себя, и 2) надежным в том смысле, что нет случаев, когда document.referrer блокируется, скажем, в этом случаеAPI будет нарушен.
Таким образом, диапазон проблем:
- Может ли document.referrer когда-либо быть
null/unavailable/incorrect
в в этой настройке .Я знаю, что это может быть иначе, если вы, например, пройдете через перенаправление, но, учитывая, что мой скрипт будет создавать iframe и устанавливать src, этот случай не должен вызывать беспокойства. - Учитывая то, что я анализирую / сохраняю document.referrer, есть ли какие-то странные уловки, с которыми другие состязательные iframes могли сообщать / перемещать iframe (чтобы запутать window.parent и т. Д.).