Что такое Clickjacking и как заголовок X-Frame-Options защищает сайт от встраивания в чужие фреймы?
Clickjacking (кликджекинг, или «угон клика») — это техника веб-атаки, при которой злоумышленник встраивает целевой сайт в невидимый или прозрачный iframe поверх своей страницы. Ничего не подозревающий пользователь думает, что кликает по элементам сайта злоумышленника, а на самом деле его клики перехватываются и применяются к скрытому содержимому — например, к кнопке подтверждения перевода денег, изменения настроек аккаунта или публикации записи в социальной сети.
**Как работает атака**
1. Атакующий создаёт вредоносную страницу.
2. На ней размещается iframe с целевым сайтом (например, банком), которому задаётся opacity: 0 или z-index ниже видимых элементов.
3. Поверх скрытого iframe располагаются привлекательные кнопки («Выиграй приз», «Смотреть видео»).
4. Пользователь кликает по видимой кнопке, но браузер регистрирует клик на скрытом элементе целевого сайта.
Результат — несанкционированное действие от имени авторизованного пользователя.
**Заголовок X-Frame-Options**
X-Frame-Options — HTTP-заголовок ответа сервера, который указывает браузеру, разрешено ли отображать страницу внутри тегов «, «, « или `
— **DENY** — страница не может быть встроена ни в какой фрейм, даже с того же домена. Максимальная защита.
— **SAMEORIGIN** — страница может отображаться во фрейме только если родительский документ находится на том же домене. Подходит для внутренних инструментов.
— **ALLOW-FROM uri** — разрешает встраивание только с конкретного указанного URL. Устаревшее значение, поддерживается не всеми браузерами.
Пример настройки в Nginx:
add_header X-Frame-Options «SAMEORIGIN»;
Пример в Apache:
Header always append X-Frame-Options SAMEORIGIN
**Современная альтернатива — Content-Security-Policy**
На смену X-Frame-Options приходит директива `frame-ancestors` в заголовке Content-Security-Policy (CSP). Она более гибкая и поддерживает несколько источников:
Content-Security-Policy: frame-ancestors ‘self’ https://trusted.example.com;
Рекомендуется использовать оба заголовка одновременно для максимальной совместимости с разными браузерами.
**Дополнительные меры защиты**
— Реализация токенов CSRF для критичных действий.
— Использование атрибута `SameSite=Strict` для cookies.
— Применение JavaScript-кода «frame busting» (хотя он менее надёжен).
— Регулярный аудит безопасности с помощью инструментов типа OWASP ZAP.
Внедрение X-Frame-Options — одна из базовых и обязательных мер защиты любого веб-приложения, особенно содержащего формы авторизации, финансовые операции или управление данными пользователей.
