window.parent.postMessage(message, window.parent.origin) более безопасен, чем window.parent.postMessage(message, '*')?
У нас есть компонент iframe, который загружается родительским фреймом. Этот фрейм может быть откуда угодно (наше веб-приложение является общим компонентом и может быть доступно из любой клиентской установки нашего основного продукта). Таким образом, мы не можем знать заранее, кто нас загрузил, если только у нас нет какой-то базы данных с разрешенными источниками, а мы этого не делаем.
Мы отправляем postMessage() в наш родительский фрейм, и мы не можем знать целевое происхождение заранее, поэтому я поставил '*'. Мой коллега предложил использовать вместо него window.parent.origin, но, насколько я понимаю, это имеет тот же эффект - postMessage проверит, что исходная точка цели такая же, как и она сама! Не говоря уже о том, что он не работает при междоменном использовании.
Так я что-то здесь упускаю? Обеспечивает ли использование window.parent.origin большую безопасность, чем подстановочный знак?
Говоря абсолютно точно, опция window.parent.origin действительно ограничит вас вашим собственным доменом, так что да, это будет безопаснее, но, вероятно, не то, что вы хотите. Разве вы не можете настроить какую-то систему ключей API, которую могла бы публиковать страница, использующая ваши компоненты?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Подстановочный знак "*" может быть опасен, если родительская страница перенаправляется на вредоносный сайт, который может получить ваше сообщение с конфиденциальными данными.
В этом конкретном случае parent.origin не принесет никаких преимуществ в плане безопасности. В идеале сервер компонента должен использоваться для обнаружения и проверки происхождения родительского окна.
И как parent.origin может быть безопаснее? Я имею в виду, что здесь задается вопрос что.
В этом конкретном случае parent.origin не принесет никаких преимуществ в плане безопасности. В идеале сервер компонента должен использоваться для обнаружения и проверки происхождения родительского окна.
Что ж, если вы не укажете конкретное происхождение, я мог бы встроить ваш компонент на страницу мой, и тогда моя страница была бы получателем всего, что вы отправляете через postMessage - может ли это утечка конфиденциальных данных, решать вам. (Но простое получение происхождения от родителя, конечно, тоже не решит эту проблему.)