Клікджекінг, також відомий як атака з перекриттям інтерфейсу користувача, це метод маніпуляції, при якому зловмисник використовує кілька прозорих або непрозорих шарів для обману відвідувача. Користувач вважає, що натискає на елемент видимого верхнього рівня сторінки, але насправді його клік перенаправляється на прихований елемент іншої веб-сторінки, яка завантажена у фоні. Таким чином відбувається перехоплення кліків або навіть введення клавіатурних символів, якщо зловмисник налаштував приховані текстові поля для крадіжки конфіденційних даних.

Для реалізації цієї загрози зловмисники поєднують каскадні таблиці стилів, фрейми та текстові поля. Головне обмеження атаки полягає в тому, що вона потребує безпосередньої взаємодії з користувачем та можливості відображення цільового сайту всередині стороннього фрейму. Якщо цільовий ресурс забороняє вбудовування у фрейми, атака стає неможливою.

Приклад атаки на прихованому фреймі

Уявімо гіпотетичний сценарій на сайті зловмисника. На цій сторінці розміщено кнопку з обіцянкою безкоштовного подарунка. Поверх цієї кнопки зловмисник завантажує невидимий iframe, який містить сторінку налаштувань профілю користувача на вразливому ресурсі example.com. Кнопка видалення повідомлень на example.com позиціонується точно над кнопкою отримання подарунка. Коли відвідувач намагається отримати подарунок, його клік обробляється невидимим фреймом example.com, що призводить до видалення даних.

Як захиститись від клікджекінгу

Захист від цієї загрози будується на обмеженні можливості вбудовування веб-сайту у фрейми на сторонніх ресурсах. Основним інструментом захисту є використання заголовків безпеки, які передаються сервером під час запиту сторінки.

  • Налаштування директиви frame-ancestors у заголовку Content Security Policy для заборони або обмеження вбудовування сторінки іншими доменами.
  • Використання застарілого заголовка X-Frame-Options для забезпечення сумісності зі старими браузерами.
  • Встановлення атрибута SameSite зі значеннями Strict або Lax для автентифікаційних файлів cookie, що запобігає їх надсиланню у сторонніх фреймах.
  • Впровадження захисного коду на рівні інтерфейсу користувача для перевірки, чи є поточне вікно найвищим у єрархії вікон браузера.
httpContent-Security-Policy: frame-ancestors 'none'
X-Frame-Options: DENY

Поширеною помилкою є думка, що використання лише захисного коду в інтерфейсі користувача гарантує повну безпеку. Сучасні браузери можуть обходити такі скрипти, тому надійний захист вимагає обов'язкового впровадження HTTP-заголовків на стороні сервера. Обмеженням захисних заголовків є те, що вони діють лише на рівні сумісних браузерів, тому комбінування політики CSP та правильних параметрів файлів cookie є критично важливим для комплексного захисту.