Безопасность iframe: кликджекинг и X-Frame-Options
Предотвращайте атаки кликджекинга с помощью X-Frame-Options и CSP
«Безопасность iframe: кликджекинг и X-Frame-Options» — бесплатный урок HTML Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Что такое кликджекинг
Кликджекинг (подмена интерфейса) встраивает целевой сайт в прозрачный фрейм поверх страницы-приманки. Пользователь думает, что нажимает на приманку, но на самом деле нажимает на скрытую страницу, прошедшую аутентификацию, — и выполняет действия на целевом сайте, не подозревая об этом.
Механика атаки кликджекинга
Злоумышленник загружает victim.com в прозрачный фрейм, расположенный поверх кнопки «Нажмите, чтобы выиграть!». Когда пользователь нажимает кнопку, он на самом деле нажимает кнопку «Удалить аккаунт» на victim.com — будучи аутентифицированным в своей сессии victim.com. Фишинг не требуется.
Заголовок X-Frame-Options
X-Frame-Options: DENY предотвращает загрузку страницы в любом фрейме. X-Frame-Options: SAMEORIGIN разрешает встраивать страницу только страницам того же источника. Устанавливайте этот заголовок на стороне сервера для всех аутентифицированных страниц, чтобы предотвратить кликджекинг.
Content-Security-Policy frame-ancestors
Content-Security-Policy: frame-ancestors 'none' — современная, более гибкая замена X-Frame-Options: DENY. frame-ancestors 'self' заменяет SAMEORIGIN. Директива frame-ancestors также может разрешать конкретные доверенные источники: frame-ancestors https://trusted.example.com.
Защита от фреймов с помощью JavaScript
В устаревших механизмах защиты от фреймов использовался JavaScript, чтобы выйти из фрейма. Атрибут sandbox легко блокирует такую защиту, поскольку запрещает выполнение скрипта. Всегда используйте заголовки на стороне сервера (X-Frame-Options или CSP frame-ancestors) — защита от фреймов с помощью JavaScript ненадёжна.
Когда разрешать встраивание во фреймы
Допустимые случаи встраивания во фреймы: встраивание собственного содержимого на собственном источнике (SAMEORIGIN), а также разрешение конкретному партнёру встраивать ваш виджет (frame-ancestors с определённым источником). Спроектируйте политику так, чтобы разрешить эти случаи и запретить все остальные.
Комбинированный подход
Для максимального охвата устанавливайте и X-Frame-Options (для старых браузеров), и CSP frame-ancestors (для современных браузеров). Если присутствуют оба заголовка, в браузерах с поддержкой CSP приоритет имеет frame-ancestors. Отправка обоих заголовков обеспечивает защиту от кликджекинга во всех пользовательских агентах.
Риски фреймов того же источника
Даже фреймы того же источника могут представлять опасность: хранимая XSS-уязвимость во встроенной странице может получить доступ к родительской странице через parent.document, если источники совпадают. Используйте sandbox без allow-same-origin для фреймов того же источника, которым не нужен доступ к родительской странице, чтобы ограничить ущерб от уязвимостей встроенного содержимого.
Проверка защиты
Проверьте защиту от кликджекинга: откройте вкладку сети браузера и проверьте заголовки ответа на наличие X-Frame-Options или CSP frame-ancestors. Такие инструменты, как securityheaders.com, анализируют заголовки. Создайте проверочную HTML-страницу с фреймом, указывающим на ваш сайт, и убедитесь, что он не загружается.
Встраивание стороннего содержимого
При встраивании стороннего содержимого (YouTube, Карты Google) вы выступаете сайтом, в который встраивают содержимое, поэтому убедитесь, что встроенный сервис разрешает встраивание в собственной политике X-Frame-Options. Нельзя встроить сайт, запрещающий встраивание, — это сделано намеренно и защищает пользователей встроенного сервиса.
CSP frame-ancestors в метатегах
В отличие от большинства директив CSP, frame-ancestors нельзя задать с помощью метатега HTTP-equiv — эту директиву необходимо передавать в заголовке HTTP-ответа. Благодаря этому злоумышленники не могут снять защиту, изменив встроенный HTML до того, как браузер прочитает метатеги.
Проверка знаний
Почему код защиты от фреймов на JavaScript ненадёжен как средство защиты от кликджекинга?
Итоги
Кликджекинг встраивает аутентифицированные страницы в прозрачные фреймы, чтобы перехватывать нажатия. Защита: заголовок X-Frame-Options: DENY или заголовок CSP frame-ancestors: none на стороне сервера. Устанавливайте оба заголовка для защиты во всех браузерах. Защита от фреймов на JavaScript ненадёжна — всегда используйте заголовки HTTP. Директива frame-ancestors предоставляет детальный список разрешённых доверенных источников, чего не может X-Frame-Options.
Изучай HTML с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 40
- Уроки
- 159
Часто задаваемые вопросы
Урок «Безопасность iframe: кликджекинг и X-Frame-Options» бесплатный?
Да — полный текст урока «Безопасность iframe: кликджекинг и X-Frame-Options» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «Безопасность iframe: кликджекинг и X-Frame-Options»?
Предотвращайте атаки кликджекинга с помощью X-Frame-Options и CSP Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Безопасность iframe: кликджекинг и X-Frame-Options»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Элемент iframe: src и sandbox
- Безопасность iframe: кликджекинг и X-Frame-Options
- Элементы embed и object
- Отложенная загрузка iframe