Вы заходите на сайт — кликаете на кнопку, а вместо ожидаемого действия открывается чужой сайт, где вас просят ввести логин или подтвердить перевод. Вы даже не поняли, что произошло. Это не ошибка, а атака — Clickjacking. Она работает тихо, незаметно, и даже опытные пользователи попадаются на неё. Я видел, как клиенты теряли деньги из-за этого. Не потому что были глупыми — просто не знали, как защититься.
В этой статье — только то, что нужно сделать прямо сейчас, чтобы перестать быть мишенью для Clickjacking. Без теории, без лишних терминов. Только практика: как настроить защиту на сайте, как защитить себя в браузере и что делать, если вы разработчик или просто пользователь.
Что такое Clickjacking и почему он опасен
Clickjacking («кликджекинг») — это когда злоумышленник накладывает на страницу невидимый или прозрачный iframe с другим сайтом. Например, вы думаете, что кликаете на кнопку «Загрузить файл» на форуме, а на самом деле кликаете на «Перевести 10 000 рублей» в интерфейсе банка, который скрыт под вашей мышью.
Это не взлом. Это обман. Вы сами кликаете — просто не туда, куда думаете. И это работает, потому что браузеры по умолчанию позволяют любому сайту вставлять чужие страницы в iframe. Даже если вы авторизованы в банке, ваша сессия активна — и iframe может использовать это.
Пример из практики: клиент пришёл с жалобой — «я не делал перевод, но деньги исчезли». Оказалось, он зашёл на сайт с рекламой, где кнопка «Скачать PDF» была накрыта iframe с интерфейсом PayPal. Он кликнул — и подтвердил перевод. Без пароля, без 2FA — просто клик.
Как защитить свой сайт: X-Frame-Options
Если вы разработчик или администратор сайта — первое, что нужно сделать: запретить другим сайтам вставлять вашу страницу в iframe. Это делается через HTTP-заголовок X-Frame-Options.
Настройка простая. Добавьте один из трёх вариантов в ответ сервера (в nginx, Apache, или в коде приложения):
X-Frame-Options: DENY— запретить вставку вообще. Лучший выбор для большинства сайтов.X-Frame-Options: SAMEORIGIN— разрешить вставку только если iframe находится на том же домене. Подходит, если вы используете iframe для своих же компонентов (например, встроенный календарь).X-Frame-Options: ALLOW-FROM https://example.com— разрешить вставку только с указанного домена. Устаревший вариант, не поддерживается в некоторых браузерах.
Как добавить в nginx:
add_header X-Frame-Options DENY;
В Apache:
Header always set X-Frame-Options "DENY"
В Node.js (Express):
app.use((req, res, next) => {
res.setHeader('X-Frame-Options', 'DENY');
next();
});
Проверить, что заголовок работает, можно в DevTools → Network → выберите любой запрос → в заголовках ответа ищите X-Frame-Options. Если его нет — защита не настроена.
Важно: X-Frame-Options — устаревший стандарт. Современные браузеры рекомендуют использовать Content-Security-Policy с frame-ancestors. Но если вы только начинаете — начните с X-Frame-Options. Он работает везде, включая старые браузеры. А потом уже добавляйте CSP.
Как защитить себя как пользователь: расширения для браузера
Если вы не разработчик — вы всё равно можете защитить себя. Просто установите расширение, которое блокирует вредоносные iframe.
Вот три рабочих варианта:
| Расширение | Поддержка | Что блокирует | Сложность настройки |
|---|---|---|---|
| uBlock Origin | Chrome, Firefox, Edge | Все iframe с подозрительных доменов, включая скрытые | Нет — работает сразу |
| NoScript (для Firefox) | Firefox | Блокирует все скрипты и iframe, пока вы не разрешите | Средняя — нужно понимать, что разрешать |
| Clickjacking Blocker (Chrome Web Store) | Chrome | Только iframe с известными доменами атак | Нет — просто включить |
Рекомендую uBlock Origin. Он бесплатный, не замедляет сайт, не требует настройки и уже встроен в список популярных блокировщиков рекламы. Но он не только блокирует рекламу — он блокирует и скрытые iframe, которые используются в Clickjacking.
Как проверить, что расширение работает: зайдите на этот тестовый сайт. Если вы видите чёрный прямоугольник — защита не работает. Если вы видите сообщение «Blocked» — всё в порядке.
Если вы используете Firefox — NoScript даёт более жёсткую защиту, но требует внимания. Вы будете получать уведомления, когда сайт пытается запустить скрипт или iframe. Это неудобно, но безопасно. Подходит для тех, кто работает с финансами или конфиденциальными данными.
Что выбрать: настройка сайта или расширение?
Если вы разработчик — вы обязаны настроить X-Frame-Options на своём сайте. Это не опция — это базовая безопасность. Даже если вы не думаете, что ваш сайт — мишень, он может стать инструментом для атаки на других.
Если вы пользователь — установите uBlock Origin. Это самое простое и эффективное решение. Не ждите, пока вас обманут. Установите сейчас.
Если вы и разработчик, и пользователь — делайте и то, и другое. Защита слоёвая: один уровень — на сервере, второй — на клиенте. Так надёжнее.
Частые ошибки
- «У меня HTTPS — значит, всё безопасно». HTTPS защищает передачу данных, но не мешает iframe вставлять вашу страницу. Clickjacking работает даже на HTTPS-сайтах.
- «Я использую CSP, значит, X-Frame-Options не нужен». CSP с
frame-ancestors— лучший способ, но он не поддерживается в старых браузерах. Если вы хотите защитить всех пользователей — используйте оба. - «Я не банк — мне это не нужно». Атаки на Clickjacking часто используются для обмана на соцсетях, в магазинах, на сайтах с личными кабинетами. Даже если вы просто храните логины пользователей — ваш сайт может быть использован как фишинг-мост.
- «Я установил расширение — и забыл». Расширения обновляются. Проверяйте, что они включены. Иногда после обновления браузера они отключаются.
- «Я использую ALLOW-FROM». Этот режим не работает в Safari и Edge. Не полагайтесь на него.
Как лучше сделать: пошаговый план
Если вы разработчик — сделайте так:
- Откройте конфиг сервера (nginx, Apache, или код приложения).
- Добавьте заголовок:
X-Frame-Options: DENY. - Проверьте через DevTools → Network → убедитесь, что заголовок приходит в ответе.
- Потом добавьте CSP:
Content-Security-Policy: frame-ancestors 'self'. - Протестируйте сайт на clickjackingdemo.com — он должен показать «Blocked».
Если вы пользователь — сделайте так:
- Установите uBlock Origin в Chrome или Firefox.
- Перезагрузите браузер.
- Зайдите на clickjackingdemo.com.
- Если вы видите «Blocked» — вы защищены.
- Не отключайте расширение, даже если «всё работает».
Что делать, если сайт уже взломан?
Если вы обнаружили, что ваш сайт вставляется в iframe на чужом сайте — это уже не просто уязвимость, это инцидент.
Сделайте сразу:
- Включите
X-Frame-Options: DENY— это остановит дальнейшие атаки. - Проверьте логи: кто и когда запрашивал страницы с iframe-заголовками? Возможно, кто-то уже собирал данные.
- Смените пароли пользователей, которые могли вводить их на вашем сайте за последние 7 дней.
- Сообщите пользователям: «Мы обнаружили попытки фишинга через iframe. Убедитесь, что вы не вводили данные на сайтах, которые не принадлежат нам».
Не пытайтесь «починить» через JavaScript. Некоторые советуют использовать if (window.top !== window) { window.top.location = window.location; }. Это не надёжно — злоумышленник может отключить JavaScript или обойти это через CSP. Только HTTP-заголовки работают всегда.
Итог: что делать прямо сейчас
Если вы разработчик — добавьте X-Frame-Options: DENY на свой сайт сегодня. Это займёт 5 минут. Проверьте через DevTools. Забудьте про это на год — и вы спасёте пользователей от обмана.
Если вы пользователь — установите uBlock Origin. Не удаляйте его. Не отключайте. Он не мешает — он защищает. Это как ремень безопасности: вы не используете его, пока не случится авария. Но когда она случится — вы будете благодарны, что надели.
Clickjacking — не редкость. Это стандартная техника для кражи данных. И она работает, потому что люди думают: «я не банк, меня не тронут». Но вас тронут. Просто потому, что вы кликнули на что-то, что выглядело безопасно.
Защита — не про сложные технологии. Она про простые шаги, которые делают вовремя.
Информация в этой статье носит ознакомительный характер. Решения по настройке безопасности сайтов и защите персональных данных следует принимать совместно с профессиональным специалистом в области кибербезопасности.
