Установить родительское происхождение для общения после сообщения - PullRequest
0 голосов
/ 13 мая 2018

У меня есть 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 будет нарушен.

Таким образом, диапазон проблем:

  1. Может ли document.referrer когда-либо быть null/unavailable/incorrect в в этой настройке .Я знаю, что это может быть иначе, если вы, например, пройдете через перенаправление, но, учитывая, что мой скрипт будет создавать iframe и устанавливать src, этот случай не должен вызывать беспокойства.
  2. Учитывая то, что я анализирую / сохраняю document.referrer, есть ли какие-то странные уловки, с которыми другие состязательные iframes могли сообщать / перемещать iframe (чтобы запутать window.parent и т. Д.).

1 Ответ

0 голосов
/ 14 мая 2018

Может показаться, что настройка Referrer-Policy: no-referrer не работает с document.referrer.

...