Понимаем, что такое кликаджекинг
Краткая историческая справка

Кликаджекинг появился не вчера. Термин закрепился в конце 2000‑х, когда исследователи Роберт Хансен и Джеремия Гроссман показали, как с помощью прозрачных фреймов можно «подменять» интерфейс сайта. Проще говоря, пользователь жмёт по видимой кнопке, а на деле кликает по невидимому слою, загруженному с атакующего ресурса. Так злоумышленник может заставить человека поставить «лайк», сменить настройки, подтвердить платёж — и всё это без взлома пароля. Тогда это казалось трюком для конференций, но довольно быстро стало реальной практикой.
За последние годы атака эволюционировала. Если раньше жертвами чаще были соцсети, то сейчас под удар попадают банки, кабинеты госуслуг, B2B‑порталы. По открытым отчётам OWASP и Verizon DBIR за 2022–2024 годы видно, что доля атак на уровень интерфейса (UI redressing, куда относится кликаджекинг) остаётся небольшой, но стабильной: она не доминирует, как SQL‑инъекции, но и не исчезает. Уязвимость регулярно всплывает в отчётах баг‑баунти и пентестов, что наглядно показывает: проблема живёт дольше, чем многие модные баги.
Почему атака до сих пор актуальна
Точной публичной статистики именно по clickjacking немного: большинство инцидентов остаются внутри компаний или фиксируются в виде обобщённых категорий «web‑уязвимости интерфейса». Тем не менее, по данным отчётов bug bounty‑платформ за 2022–2024 годы, кейсы с UI‑подменой попадаются ежегодно, особенно в банковском секторе и e‑commerce. Дополнительно HTTP Archive показывает, что лишь у порядка 10–15% популярных сайтов включены современные защиты вроде CSP `frame-ancestors`, а это значит, что поле для атак остаётся довольно широким.
Парадокс в том, что кликаджекинг почти всегда можно прикрыть одной строкой в настройках сервера, но ей часто пренебрегают. Разработчики заняты функционалом, безопасники — «громкими» уязвимостями. В итоге защита от clickjacking для сайта нередко воспринимается как «косметика», хотя именно через интерфейс проходят деньги, персональные данные и управленческие действия. Пока сайты позволяют встраивать себя в чужие фреймы без ограничений, у атакующего сохраняется уютная площадка для манипуляций с пользователями.
Базовые принципы защиты
Технический фундамент
Если отбросить маркетинг, технический базис прост: нельзя позволять загружать критичные страницы в чужие фреймы. На уровне HTTP для этого служат два ключевых механизма. Во‑первых, настройка заголовков x-frame-options для защиты от clickjacking: значения `DENY` и `SAMEORIGIN` блокируют или жёстко ограничивают встраивание. Во‑вторых, более современный подход — директива Content-Security-Policy `frame-ancestors`, которая гибко определяет, кому разрешено фреймить ваш ресурс. Вместе они закрывают основной вектор, на котором строятся классические сценарии «невидимых» кликов.
Но одних заголовков мало, если не понимать, как предотвратить clickjacking атаки в сложных сценариях: виджеты партнёров, встроенные панели админки, внутренние микросервисные порталы. Здесь важно разделять зоны риска. Например, публичные лендинги можно оставить фреймо‑дружелюбными, а платёжные формы, профили пользователей и панели управления — блокировать любым внешним встраиваниям. Такой дифференцированный подход позволяет не ломать интеграции и одновременно прикрывать наиболее чувствительные участки интерфейса.
Организационные меры
Защита не заканчивается конфигами сервера. Часто кликаджекинг всплывает там, где нет чётких правил разработки. Имеет смысл прямо в код‑стандартах прописать требования: для всех страниц с авторизацией и операциями с деньгами заголовки безопасности обязательны, а новые фреймы и виджеты проходят ревью безопасника. Этот минимальный процесс уже серьёзно снижает шанс, что кто‑то случайно выкатит критичный раздел без нужной политики. В крупной компании полезно добавить регулярные сканирования и пентесты именно на UI‑подмену.
Если команда не чувствует уверенности в теме, логично привлечь внешние услуги по защите сайта от clickjacking — как разовые аудиты, так и подключение облачных решений. Провайдеры, предлагающие web application firewall защита от clickjacking и сопутствующих web‑угроз, берут на себя часть рутины: отслеживание новых техник обхода, обновление сигнатур, аналитика логов. Важно лишь понимать, что WAF и внешние сервисы — это надстройка, а не замена базовым заголовкам и грамотной архитектуре интерфейса.
Практические примеры реализации
Примеры для популярных стеков
На практике всё сводится к паре строк. Для типичного Nginx можно добавить в конфиг: `add_header X-Frame-Options "SAMEORIGIN" always;` и `add_header Content-Security-Policy "frame-ancestors 'self';" always;`. В Apache используется директива `Header set`. В приложениях на Node.js подобные заголовки удобно вешать через middleware (например, Helmet в Express). Смысл один: любой ответ с чувствительными данными обязан нести в себе указание, где он может быть встроен, а где — категорически нет.
При этом нужно помнить об исключениях. Бывает, что кабинет партнёра легально встраивается в их CRM‑систему. Тогда в `frame-ancestors` перечисляются доверенные домены, а не только `'self'`. Многие фреймворки уже предоставляют встроенные средства для такой настройки, но их надо сознательно включить. Поэтому полезно раз в год проводить ревизию: проверять заголовки реальных ответов, а не только шаблонов конфигов, и убеждаться, что новые модули не обходят заданную политику из соображений «так быстрее выкатить фичу».
Пошаговый чек‑лист
Ниже — упрощённый порядок действий, который можно пройти за вечер и уже сильно усилить сайт:
1. Найдите все страницы, где есть авторизация, платежи, управление доступами или персональные данные.
2. Включите `X-Frame-Options` и `CSP frame-ancestors` минимум со значением `SAMEORIGIN`/`'self'` для этих URL.
3. Проверьте, не ломает ли это легальные интеграции (CRM, партнёрские панели) и при необходимости явно добавьте их домены.
4. Настройте автоматические тесты или сканер, который регулярно проверяет наличие заголовков.
5. Обучите разработчиков и тестировщиков базовым признакам кликаджекинга и добавьте проверку в чек‑листы ревью.
Частые заблуждения и подводные камни
Мифы о безопасности фреймов

Распространённое заблуждение звучит так: «У нас же HTTPS, какие ещё проблемы с кликами?». Шифрование защищает трафик от подмены по дороге, но никак не мешает честно загружать ваш сайт во фрейм на другом домене и заставлять пользователя нажимать там нужные кнопки. Другой миф — «мы маленький проект, на нас не нападут». Кликаджекинг вообще не требует точечного таргетинга: достаточно массово распространить вредоносную страницу, а фреймом может быть любая форма логина или платежа, до которой дотянется браузер жертвы.
Ещё один уверенный, но ошибочный тезис — «у нас стоит WAF, всё закрыто». Да, современные решения умеют частично отслеживать нетипичные паттерны встраивания, и web application firewall защита от clickjacking может поймать очевидные случаи. Но если на стороне приложения заголовки не настроены, WAF остаётся всего лишь фильтром на периметре: он не контролирует, как ваш контент будет отображаться в браузере. Поэтому любые периметровые решения эффективны только в связке с корректными настройками самого сайта.
Ошибки при внедрении политики
На практике часто встречается перекос: либо администрация сознательно не включает строгие заголовки из‑за опасений «сломать партнёров», либо, наоборот, добавляет `DENY` везде, а потом вынуждена точечно «отщёлкивать» исключения. Гораздо разумнее начать с анализа: выписать, кому действительно нужно встраивать ваш контент, а затем сформулировать политику под реальные связи. В этом смысле защита от clickjacking для сайта — не разовая «галочка», а часть архитектурных решений о том, кто и как может использовать ваш интерфейс.
В крупных проектах ещё одна типичная ошибка — забыть про поддомены и отдельные сервисы. Например, основной сайт настроен правильно, а старый биллинг или админка живут на другом хосте без какой‑либо политики фреймов. В результате именно они становятся удобной целью. Чтобы этого избежать, имеет смысл вести единый реестр приложений и распространять стандарты безопасности и настройки заголовков x-frame-options для защиты от clickjacking на все компоненты. Тогда даже при росте инфраструктуры риск «забытых дверей» заметно снижается.



