TGViewer
WebDev+ | Веб-разработка WebDev+ | Веб-разработка @webdev_plus · 7.94K subscribers
Post #652 1.46K
Вот как работает подмена DOM-объектов:

Когда вы создаёте элемент с id, браузер автоматически создаёт глобальную переменную с таким именем:

<a id="foo"></a>


Теперь window.foo указывает на этот элемент.

Но если вы создаёте несколько элементов с одинаковым id:

<a id="foo"></a>
<a id="foo"></a>


Теперь window.foo становится HTMLCollection, а не отдельным элементом.

Если вы добавите атрибут name:

<a id="foo" name="bar" href="..."></a>


Тогда window.foo.bar будет указывать на этот элемент
(работает в браузерах Chromium/WebKit, но не в Firefox).

Теперь представьте распространённый JS-паттерн:

var someObject = window.someObject || {};


Он должен подставить объект по умолчанию, если window.someObject не существует.
Но если window.someObject был подменён через HTML, то вместо объекта будет DOM-элемент и скрипт это молча примет.

Теперь рассмотрим JS-логику:

let imgSrc = someObject.avatar;


Если атакующий подменит someObject.avatar таким образом:

<a id="someObject"></a>
<a id="someObject" name="avatar" href='cid:"onerror=alert(1)//'></a>


И если этот HTML вставлен, например, через innerHTML, то может получиться:

<img src="cid:" onerror="alert(1)//">


И это вызовет XSS 🏆

Вот краткий разбор этой уязвимости и лабораторной работы от WebSecAcademy

@WebDev_Plus
More from @webdev_plus
  1. Oct 12, 2026Оптимизация SVG, краткий гайд для начинающих Часто на сайтах встречаются SVG-изображения,…
  2. Oct 12, 2026Эта библиотека позволяет запускать полноценные 3D-физические симуляции прямо в браузере. J…
  3. Oct 11, 2026Свойство shape-outside Определяет форму, вокруг которой должно обтекаться соседнее встроен…
  4. Oct 11, 2026Быстрый совет по JS: используйте Gamepad API, чтобы в реальном времени отслеживать статус…
  5. Oct 10, 2026Chrome DevTools – это не только панель для отладки, но и полноценная среда для проектирова…
  6. Oct 10, 2026Обрати внимание, что в корректном примере чипы мгновенно перемещаются на новую позицию, ко…
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 →