TGViewer
Senior Frontend - javascript, html, css Senior Frontend - javascript, html, css @seniorfront · 23.8K subscribers
Post #5845 961
🔑 Обработчик postMessage без проверок слушается кого угодно

Виджет в iframe (комментарии, форма оплаты) не может сам растянуться на странице. Поэтому он шлёт родителю сообщение через postMessage, а родитель в обработчике message выставляет iframe новую высоту.

Подвох в том, что браузер доставит сообщение от любого окна, у которого есть ссылка на ваше. Чужая страница одной строкой пришлёт { type: 'resize', height: 1 }, и виджет схлопнется до одного пикселя.

Спасает строгое сравнение event.origin с ожидаемым адресом. Это поле заполняет сам браузер, и отправитель не может его подделать.

if (event.origin !== WIDGET_ORIGIN) return;


Но origin говорит, с какого сайта пришло сообщение, а не из какого окна. Два iframe с одного домена пройдут проверку оба, и сообщение от одного изменит размер другого.

Как это закрыть через event.source и что ещё проверить в самих данных (вроде height: 1e9), автор показывает на живых демо с тремя атаками.

👉 @seniorFront
More from @seniorfront
  1. Oct 10, 2026Post #5854
  2. Oct 9, 2026🔍 Почему overflow: hidden не удерживает размытие Свойство backdrop-filter: blur() размыва…
  3. Oct 7, 2026📐 Как заменить CSS progress(), пока его поддерживают не везде Функция progress() показыва…
  4. Oct 6, 2026📜 Страница скроллится, а window.scrollY показывает 0 У каждой страницы есть главный конте…
  5. Oct 5, 2026✨ Одна и та же CSS-переменная может дать 1, а может 2 Кастомные свойства вроде --index по…
  6. Oct 2, 2026🎉 iframe, который сам подстраивается под содержимое Обычно у <iframe> фиксированный разме…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →