PostMessage target origin - window.parent.origin vs "*"

window.parent.postMessage(message, window.parent.origin) более безопасен, чем window.parent.postMessage(message, '*')?

У нас есть компонент iframe, который загружается родительским фреймом. Этот фрейм может быть откуда угодно (наше веб-приложение является общим компонентом и может быть доступно из любой клиентской установки нашего основного продукта). Таким образом, мы не можем знать заранее, кто нас загрузил, если только у нас нет какой-то базы данных с разрешенными источниками, а мы этого не делаем.

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

Так я что-то здесь упускаю? Обеспечивает ли использование window.parent.origin большую безопасность, чем подстановочный знак?

Что ж, если вы не укажете конкретное происхождение, я мог бы встроить ваш компонент на страницу мой, и тогда моя страница была бы получателем всего, что вы отправляете через postMessage - может ли это утечка конфиденциальных данных, решать вам. (Но простое получение происхождения от родителя, конечно, тоже не решит эту проблему.)

CBroe 17.04.2018 10:12

Говоря абсолютно точно, опция window.parent.origin действительно ограничит вас вашим собственным доменом, так что да, это будет безопаснее, но, вероятно, не то, что вы хотите. Разве вы не можете настроить какую-то систему ключей API, которую могла бы публиковать страница, использующая ваши компоненты?

Kaiido 17.04.2018 10:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
4 177
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подстановочный знак "*" может быть опасен, если родительская страница перенаправляется на вредоносный сайт, который может получить ваше сообщение с конфиденциальными данными.

В этом конкретном случае parent.origin не принесет никаких преимуществ в плане безопасности. В идеале сервер компонента должен использоваться для обнаружения и проверки происхождения родительского окна.

И как parent.origin может быть безопаснее? Я имею в виду, что здесь задается вопрос что.

Kaiido 17.04.2018 10:17

В этом конкретном случае parent.origin не принесет никаких преимуществ в плане безопасности. В идеале сервер компонента должен использоваться для обнаружения и проверки происхождения родительского окна.

Taras Romaniv 17.04.2018 10:33

Другие вопросы по теме