Каким тестом установить, что чувствительная страница защищена от встраивания в чужой iframe?
Нужно проверить, запрещает ли ответ чувствительной страницы встраивание в контекст другого источника. Для этого анализируют заголовки Content-Security-Policy с директивой frame-ancestors и X-Frame-Options, а затем подтверждают результат фактической загрузкой страницы внутри iframe на отдельном тестовом домене.
Если страница успешно отображается во фрейме чужого источника и пользователь может выполнить там значимое действие, это признак риска clickjacking. Одного наличия заголовка недостаточно: важно убедиться, что он действительно применяется браузером и соответствует требуемой политике доверенных источников.
Встраивание страниц во фреймы само по себе является штатной возможностью браузеров, но оно позволяет наложить невидимый или замаскированный интерфейс поверх страницы злоумышленника. Пользователь считает, что нажимает элемент одного сайта, хотя фактически взаимодействует с элементом другого.
Для ограничения такого сценария появились X-Frame-Options, а затем более гибкая директива frame-ancestors в Content-Security-Policy. Эти механизмы решают исходную проблему на уровне браузера: страница сама объявляет, какие источники могут быть её предками во фреймовом контексте.
Тестировщик должен оценить не только публичную страницу, но и авторизованные разделы: настройки учётной записи, подтверждение операций, административные формы и другие экраны, где одно нажатие меняет состояние или раскрывает чувствительные данные.
Если такая страница разрешает встраивание во внешний источник, злоумышленник может создать маскирующий интерфейс и побудить пользователя нажать кнопку в невидимом или смещённом фрейме. CSRF-защита, проверка происхождения запроса и атрибуты cookie могут уменьшить риск отдельных сценариев, но не заменяют запрет опасного встраивания.
Сначала проверьте заголовки ответа именно защищаемой страницы. Предпочтительная политика задаётся через Content-Security-Policy: frame-ancestors: она может полностью запретить встраивание или перечислить допустимые источники. X-Frame-Options поддерживает более ограниченные варианты, например полный запрет или разрешение только того же источника, и часто используется как совместимый запасной механизм.
Затем разместите страницу в iframe на источнике, который не входит в разрешённый список, и проверьте поведение в поддерживаемых приложением браузерах. Ожидаемый результат — браузер блокирует отображение страницы, а не просто скрывает отдельный элемент интерфейса.
Проверку следует проводить в авторизованном состоянии и с реалистичным сценарием действия. Если страница не отображается, но отдельный endpoint всё ещё выполняет операцию без требуемой авторизации или проверки запроса, это уже другая проблема контроля доступа, а не только clickjacking.
Учитывайте границы политики. SAMEORIGIN разрешает встраивание страницами того же источника; это безопасно только если все такие страницы действительно доверены. Разрешение конкретного внешнего источника должно быть обосновано, а широкое разрешение для любых источников фактически устраняет защиту.
В административной панели форма удаления пользователя имела защиту от подделки запроса, но страница разрешала встраивание. Рассматривались три варианта: запретить фреймы полностью, разрешить их только для корпоративного портала или оставить защиту только на уровне токена формы.
Полный запрет был самым простым, но мешал легитимному встраиванию панели в корпоративный портал. Оставить только токен было недостаточно: авторизованный администратор мог визуально обманом нажать настоящую кнопку внутри фрейма. Выбрали разрешение встраивания только для явно доверенного источника через frame-ancestors, добавили совместимый заголовок X-Frame-Options там, где это требовалось политикой поддержки браузеров, и проверили запрет с тестового внешнего домена.
В результате портал продолжил работать, а страница удаления перестала отображаться во фреймах из недоверенных источников. Дополнительно проверили, что ошибка блокировки не раскрывает административное содержимое и что прямой переход на страницу сохраняет штатное поведение.
Нет. Нужно проверить фактическую загрузку страницы во фрейме и соответствие политики реальным требованиям. Кроме того, Content-Security-Policy frame-ancestors может задавать более точную современную политику, а поддержка и приоритет механизмов зависят от браузеров и политики совместимости приложения.
Не полностью. Атрибут SameSite влияет на отправку cookie в зависимости от контекста запроса, но не является универсальным запретом визуального встраивания. Даже если конкретное действие не сработает без cookie, сама возможность отображения чувствительного интерфейса во внешнем контексте может привести к утечке данных или обману пользователя. За запрет фреймов отвечают прежде всего frame-ancestors и X-Frame-Options.
Для чувствительных страниц обычно да, если нет обоснованной потребности во встраивании. CSRF-токен проверяет подлинность запроса, но не сообщает пользователю, с каким интерфейсом он взаимодействует, и не предотвращает обман через наложенный фрейм. Если встраивание необходимо, следует явно ограничить доверенные источники и отдельно проверить, что все критичные действия требуют подходящей авторизации и не зависят только от визуального интерфейса.