postMessage
Родитель и iframe (в т.ч. cross-origin) общаются через postMessage. Безопасно только если:
- отправитель указывает точный target origin (не
"*" в чувствительных сценариях);
- получатель проверяет
event.origin, обычно event.source и форму event.data.
const iframe = document.querySelector("iframe");
iframe.contentWindow.postMessage("Hello from parent", "https://widget.example");
window.addEventListener("message", (event) => {
if (event.origin !== "https://parent.example") return;
if (event.source !== window.parent) return;
console.log(event.data);
});
Риски
Игнор проверки origin → чужой фрейм может слать команды. Не выполняйте строки из data как код.
Итог: postMessage — мост между контекстами; origin/source/схема данных — обязательная часть ответа на собеседовании.