# Clickjacking

### Что такое кликджекинг (clickjacking)&#x20;

Вид атаки, при которой пользователь неосознанно кликает на элементы веб-страницы, предполагая, что он взаимодействует с совсем другим контентом. \
\
Злоумышленники накладывают невидимый фрейм (или части фрейма) поверх страницы, которую пользователь на самом деле видит. Например, жулик может наложить невидимый лайк на видео в YouTube, так что пользователь, нажимая на видео для воспроизведения, на самом деле ставит лайк другой странице или подписывается на канал, о котором ничего не знает.

Этот метод используют для распространения вредоносного ПО, несанкционированного сбора данных и других не менее зловредных целей.&#x20;

### Как защититься от кликджекинга?

1. **Заголовки безопасности, такие как X-Frame-Options или Content Security Policy (CSP).**

Этот способ более надежный, так как работает на уровне HTTP, до загрузки какого-либо содержимого пользователя. Когда X-Frame-Options установлен в `DENY`→ он полностью запрещает отображение страницы в фрейме. Когда установлен в `SAMEORIGIN` → страница сможет отображаться в фрейме только на том же домене.

**`X-Frame-Options: DENY`** Или: `X-Frame-Options: SAMEORIGIN`

Также можно использовать [Content Security Policy (CSP)](https://notes.kraken-security.ru/kraken/krupicy-znanii/obshie-stati/o-content-security-policy-csp) с директивой `frame-ancestors`, которая позволяет более гибко контролировать, какие источники могут встроить вашу страницу во фрейм.

`Content-Security-Policy: frame-ancestors 'self' https://trustedwebsite.com;`

Этот CSP разрешает встраивание страницы только если она открыта непосредственно на вашем домене ('self') или на домене trustedwebsite.com.\
\
**2. Скрипты, которые обнаруживают попытки встраивания страницы в фрейм.**\
\
**Вот пример** JavaScript-скрипта, который обнаруживает, если ваша веб-страница загружается внутри фрейма, и предпринимает действия для предотвращения кликджекинга:

`if (window.top !== window.self) { // Проверяем, загружается ли страница в топ-уровне окне`&#x20;

`window.top.location = window.location; // Перенаправляем браузер на "настоящий" адрес страницы // Или же можно отобразить сообщение об ошибке или предложить пользователю пройти по правильной ссылке }`

В этом скрипте: \
`window.top` → ссылается на самый верхний фрейм в иерархии вложенных фреймов\
`window.self` → ссылается на текущее окно.&#x20;

Если они не равны, значит, страница загружена внутри фрейма, и скрипт перенаправляет браузер на тру веб-страницу, выходя из внешнего фрейма.

**3. Визуальная индикация**\
\
Иногда можно использовать техники, которые служат для визуальной индикации того, что элементы интерфейса безопасны для взаимодействия. Пример: добавление шума или водяных знаков в фон, чтобы осложнить создание злоумышленниками невидимых фреймов.
