- Регистрация
- 13 Июн 2025
- Сообщения
- 8
- Реакции
- 2
- Баллы
- 3
Сегодня разберём нестандартную атаку — DOM Clobbering, которая позволяет перезаписывать JavaScript-переменные через HTML-разметку.Всем привет!
Что такое DOM Clobbering?
Это техника, когда злоумышленник внедряет HTML-элементы (например,
Код:
<a id="x">
Чем опасна?
- Обход защиты XSS (без использования
Код:
<script>
- Подмена логики приложения
- Взаимодействие с другими уязвимостями (например, prototype pollution)
Как работает атака?
1. Базовый пример
Допустим, есть такой код:
Код:
javascript
if (window.isAdmin) {
showAdminPanel();
}
Атакующий может внедрить HTML:
Код:
<a id="isAdmin" href="https://evil.com">Click me</a>
Теперь
Код:
window.isAdmin
2. Подмена методов (например, console.log)
Если код использует
Код:
console.log
Код:
javascript
function logError(msg) {
console.log("[ERROR]", msg);
}
Атакующий внедряет:
Код:
<form id="console" action="javascript:alert(1)">
<input id="log" value="Hacked!">
</form>
Теперь
Код:
console.log
Код:
<input>
Код:
logError()
Где встречается?
1. SPA-приложения (React, Angular, Vue), где DOM активно меняется
2. Редакторы контента (TinyMCE, CKEditor)
3. Шаблонизаторы, которые разрешают HTML (например,
Код:
{{{raw_html}}}
Как защититься?
1. Используйте let/const вместо глобальных переменных
Код:
javascript
const isAdmin = false;
2. Проверяйте тип переменных
Код:
javascript
if (typeof isAdmin === "boolean") {
showAdminPanel();
}
3. Очищайте пользовательский HTML
- DOMPurify (для удаления опасных атрибутов)
- CSP с
Код:
unsafe-inline: none
4. Избегайте глобальных неймспейсов
Код:
javascript
const appConfig = Object.freeze({
isAdmin: false
});
Вывод
DOM Clobbering — это креативная атака, которая обходит классические защиты. Её сложно обнаружить, но легко предотвратить.