Кликджекинг — это злонамеренная атака, при которой пользователей обманом заставляют нажимать на ссылки или элементы пользовательского интерфейса на сайте, который выглядит как доверенный и знакомый сайт. Обычно это достигается путем внедрения части или всего доверенного сайта во вредоносный сайт с помощью <iframe>
.
Заголовок X-Frame-Options
(XFO) и директива frame-ancestors
в заголовке Content-Security-Policy
(CSP) могут смягчить атаки кликджекинга, контролируя, как сайт может быть встроен в <iframe>
.
Как проваливается аудит Lighthouse
Аудит будет пройден, если заголовок XFO установлен с помощью SAMEORIGIN
или DENY
или директива frame-ancestors
установлена в заголовке CSP. Аудит завершится неудачей, если ни одна из этих политик управления кадрами не настроена.
Как настроить политику контроля фреймов для предотвращения кликджекинга
Политика управления кадрами должна быть установлена в заголовках HTTP исходного запроса документа. Заголовок X-Frame-Options
и директива frame-ancestors
в Content-Security-Policy
не будут работать, если они установлены в элементе <meta>
.
заголовок XFO
Установка DENY
или SAMEORIGIN
для заголовка XFO смягчит атаки кликджекинга:
X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY
Директива SAMEORIGIN
разрешает отображение страницы только в том случае, если все родительские фреймы имеют то же происхождение, что и сама страница. И наоборот, директива DENY
предотвращает отображение страницы во фрейме, независимо от происхождения родительского фрейма.
заголовок CSP
Директива frame-ancestors
в заголовке CSP определяет, какие сайты могут встраивать данную страницу в <frame>
, <iframe>
, <object>
или <embed>
. Подобно XFO, директиву CSPframe frame-ancestors
можно использовать для смягчения атак кликджекинга, установив для нее значение self
или none
:
Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';
Однако директива frame-ancestors
более гибкая, чем XFO, поскольку она может устанавливать определенные родительские источники, которые могут встраивать страницу:
Content-Security-Policy: frame-ancestors 'self' https://example.com;