кликджекинг что это такое
Кликджекинг
Кликджекинг (clickjacking) – обманная технология, основанная на размещении вызывающих какие-то действия невидимых элементов на сайте поверх видимых активных (кнопки, воспроизведение видео и т. д.). В результате пользователь, сам того не зная, совершает что-то, что не входило в его планы. Например, собирается воспроизвести видео, но подписывается на чью-то рассылку.
Цель кликджекинга может быть любой – от более-менее безобидной накрутки лайков в социальных сетях или подписчиков до скрытого получения персональных данных, совершения покупок за чужой счет и т. д. Чаще всего идет взаимодействие через социальные сети: лайки, вступления в сообщества, кражу личных данных из профиля.
Отношение поисковых систем
Яндекс относит кликджекинг к факторам, негативно влияющим на ранжирование сайта, потому что технология в той или иной степени наносит вред пользователям.
При обнаружении использования обманной технологии позиции сайта в органической выдаче Яндекса понизятся, пока не прекратится использование кликджекинга.
Отмечают проседание позиций на 20–30 пунктов и заметное снижение поискового трафика по брендовым запросам.
Ограничения в ранжировании снимаются в течение двух неделей после устранения проблемы. В редких случаях нужен срок немного больше.
Наложение санкций за кликджекинг отображается в разделе «Безопасность и нарушения» в Яндекс.Вебмастере.
В Яндекс.Браузере сайт будет показываться с предупреждением, что может заметно сказываться на кликабельности.
Решение о наложении санкций применяется только по актуальным данным. То есть использование кликджекинга, например, месяц назад не сказывается на его сегодняшнем положении в выдаче Яндекса.
Если код обманной технологии есть, но неактивен, ограничения в ранжировании на поиске Яндекса не будет.
Google официально не понижает позиции сайта в выдаче, но замеченные в использовании ресурсы исключаются из контекстно-медийной сети, их владельцы не смогут зарабатывать на размещении рекламы от Гугла.
Риски
Не все владельцы сайтов знают, что на их ресурсе используется кликджекинг. Он может быть добавлен незаметно вместе с любым кодом неизвестного происхождения.
Разработчики не афишируют, что применяют кликджекинг. А результат его работы, например кражу персональных данных, могут выдавать как цель, достигаемую другими методами.
Так, например, кликджекинг используют некоторые сервисы, обещающие повысить продажи с сайта с помощью идентификации посетителей через профили в социальных сетях. Контакты пользователя сохраняются в системе и употребляются для рассылки спама, осуществления навязчивых звонков и т. д.
При решении вопроса о добавлении какого-либо кода на сайт должны насторожить следующие обещания разработчика:
Сервисы, оказывающие подобные услуги, необязательно используют кликджекинг, так как есть и другие, легальные технологии, не обманывающие пользователей и не вызывающие понижение в ранжировании в Яндексе. Но недобросовестные разработчики могут на самом деле применять и кликджекинг, выдавая за него другую методику. Поэтому нужно проверять работу всех добавляемых на сайт элементов.
Код может быть размещен осознанно или нет не только владельцем сайта. Технологию могут внедрить злоумышленники, взломав ресурс.
Как обнаружить кликджекинг
Если в Вебмастере Яндекса появилось сообщение, что сайт использует обманную технологию, нужно выявить элементы, содержащие вредоносный код.
Найти их можно с помощью специального софта или вручную.
Пример софта – расширение Clickjacking Reveal для браузера Google Chrome. Нужно произвести установку, на исследуемом сайте открыть Developer Tools (Ctrl + Shift + I), обновить страницу (Ctrl + F5). Расширение найдет вредоносный код. Если он есть, откроется вкладка Source. В ней будут указаны скрипты, использующие обманную технологию.
Чтобы найти кликджекинг вручную, нужно выявить скрытые элементы. Для этого используется консоль браузера. Во время проверки нужно быть авторизованным в какой-нибудь социальной сети.
Необходимо выполнить следующие действия:
Если найден код, являющийся причиной кликджекинга, его нужно удалить. Предварительно рекомендуется сохранять резервную копию сайта, чтобы случайно не нарушить работу каких-то необходимых и безопасных для пользователей элементов.
После устранения кода кликджекинга нужно зайти в раздел «Безопасность и нарушения» в Вебмастере Яндекса и нажать на кнопку «Я все исправил», чтобы быстрее произошла повторная проверка.
Что не относится к кликджекингу
Внедрение санкций со стороны Яндекса за кликджекинг вызвало много вопросов о некоторых размещаемых на сайтах элементах. Что не попадает под определение и может использоваться:
Не любое взаимодействие сайта с социальной сетью может относиться к кликджекингу. Обманная технология – это только та, которая работает без ведома пользователей, скрыта от них, тайно получает данные, которые они не собирались о себе сообщать, или заставляет неосознанно совершать незапланированные действия. За использование легальных технологий, обращающихся к соцсетям, со стороны Яндекса нет санкций.
Новые виды атак на основе технологии кликджекинга
Классическое применение кликджекинга – рапространение ссылок через Facebook
В классическом сценарии кликджекинга злоумышленник прячет кнопку «Like» или «Share» в прозрачном iframe. Этот iframe располагается над элементом страницы, на который должен нажать пользователь, также iframe может перемещаться за курсором мыши. При нажатии на элемент клик перенаправляется на невидимую кнопку «Like» или «Share». Такие действия не ограничивается Facebook’ом, злоумышленнику только нужно иметь возможность спрятать элементы другого сайта в iframe.
Ниже приведено типичное сообщение, которое можно увидеть в сети Facebook, если одно из ваших соединений было перехвачено с помощью кликджекинга:
Пройдя по ссылке, расшаренной вашим другом, вы попадете на сайт с видео YouTube. Однако, вы не увидите кнопок «Like», которые я выделил на приведенном ниже скриншоте:
Кнопки «Like» расположены там, куда пользователь обычно нажимает, чтобы просмотреть видео: в середине окна и в левом нижнем углу. Жертва не увидит эти кнопки, потому что они находятся в невидимом прозрачном iframe. Запустив это видео пользователь нажмет кнопку «Like», увеличивая популярность сайта на Facebook.
Новые вариации техник кликджекинга
В работе Clickjacking Attacks Unresolved, Линь-Шунг Хуанг (Lin-Shung Huang) и Коллин Джексон (Collin Jackson) рассмотрели более хитрые вариации кликджекинга. Например, они продемонстрировали, как злоумышленник может идентифицировать пользователя вредоносного сайта, запрашивая его информацию у Facebook.
Я записал демонстрационное видео деанонимизации пользователя. На видео показана кнопка «Like», которая перемещается за курсором жертвы, но в реальной атаке кнопка была бы невидимой. Когда пользователь неумышленно нажмет эту кнопку, он станет другом злоумышленника на Facebook (прошу прощения за возможную неточность в терминах Facebook, сам Facebook’ом не пользуюсь – прим. перев.).
Затем страница злоумышленника через FB.Event.subscribe(‘edge.create’, …) узнает, что жертва нажала кнопку «Like», передает сообщение серверу злоумышленника, который получает список друзей и идентифицирует нового друга. Сервер запрашивает публичную информацию пользователя через Facebook Graph API, и удаляет пользователя из списка друзей.
Эти действия позволяют злоумышленнику получить публичные данные пользователя, включая id пользователя. Авторы работы демонстрируют эту атаку, проведя ее с помощью кнопки Твиттера «Follow»:
Кликджекинг и timing атаки
Хуанг и Джексон описали click-timing атаку, называемую двойным кликджекингом, в которой пользователь через запрос злоумышленника перенаправляется на авторизацию у OAuth-провайдеров. Согласно документу, этот подход работает даже если на сайте предприняты такие меры против кликджекинга с помощью iframe, как X-Frame-Options.
Хотя злоумышленник не может вставить iframe на таких сайтах, он может загрузить страницу OAuth в pop-under окне. Pop-under окно после открытия скрывается за окном браузера. С тех пор, как браузеры стали блокировать всплывающие окна, которые открываются без участия пользователя, для этой атаки требуется большое количество кликов, чтобы обойти блокирование всплывающих окон.
Чтобы увидеть концептуальный код атаки двойного кликджекинга, пройдите по ссылке Clickjacking Attacks Unresolved.
Кликджекинг или нет?
Фильтр Яндекса за обманные технологии
Как говорят, знал бы прикуп, жил бы в Сочи. Однако это уже будет не красивая игра, а мухлеж с краплением карт. К чему все это? Да все просто. Каждый бизнесмен не откажется узнать ценную информацию о своих потенциальных клиентах, которую можно будет использовать для повышения продаж. Скажем, профиль ВКонтакте, телефон, почту или что-то еще.
Но далеко не каждый посетитель согласится оставить такую информацию о себе. И тут на помощь предпринимателям всегда готовы прийти сторонние сервисы по получению информации. Как оказывается, не все такие методы работы с клиентами в глазах поисковых систем, а в частности Яндекса, законны.
Не хочет клиент оставлять вам данные – силой их брать не стоит (и обманом тоже). Эти действия называются страшно красивым словом «кликджекинг», они караются санкциями с понижением позиций в органике.
На самом деле, кликджекинг явление не новое.
Яндекс порадовал мир санкциями за серые методы выуживания информации у посетителей сайта (именно это и называется кликджекингом) еще в декабре 2015 года. Вскользь об этой технологии мы уже писали.
Но, как показывает практика, до сих пор далеко не все владельцы сайтов знают, что такое кликджекинг и как он может навредить сайту. Что ж, давайте разбираться, что это такое, чем опасно, как проверить и с какими сервисами лучше не дружить.
Что такое кликджекинг?
Цитирую, как написано в Яндекс.Блоге для вебмастеров: «Кликджекинг – механизм обмана, связанный с размещением на сайте невидимых элементов, взаимодействие с которыми пользователь осуществляет, не подозревая этого».
Что значит «невидимые элементы» – это такие элементы, которые невозможно увидеть на сайте, скажем, потому что они расположены на специальном прозрачном слое, поверх основных, видимых деталей сайта. Обычно поверх кнопок, форм, видеороликов. Т.е. там, где пользователи предположительно будут взаимодействовать с сайтом. Нажимает пользователь на видеоролик, а на самом деле попутно тыкает на кнопку «соглашаюсь поделиться информацией о себе» – ну это если утрированно объяснять.
Чем опасен кликджекинг?
Как таковая технология кликджекинга для сайта не опасна. Ну стоит код, который подгружает данные о пользователях, самому сайту от этого ни холодно ни жарко. Проблема не в коде, проблема в том, что с таким поведением активно борется Яндекс. За кликджекинг предусмотрены санкции с понижением позиций от 20 – 30 пунктов и более.
Примечательно то, что в настоящее время вебмастера не получают уведомлений о том, что на сайте используется запрещенная технология и за это могут быть наложены санкции. Поставил ты себе код какого-нибудь новомодного счетчика в маркетинговых целях, сайт оказывается под санкциями, а ты и не догадываешься об этом.
Как говорят яндексовцы, в ближайшее время появится такое предупреждение, но пока только постфактум вы можете получить сообщение с ай-яй-яй о применении к сайту санкций за установку и использование запрещенного кода.
Как оказывается, несмотря на значительный срок существования санкций, часть собственников до сих пор не знают, что это такое. Подтверждение тому – небольшой опрос, который мы провели на днях в группе (на фото фрагмент поста, где видны результаты голосования)
Что принимают за кликджекинг?
Пользователи не до конца разбираются в том, что за зверь этот кликджекинг. Поэтому на практике возникает много вопросов. Даже если посмотреть на скрин выше (там речь идет о коде для ретаргетинга из ВКонтакте, который устанавливается на сайте), видно, что мнения разделились. И часть людей считают это кликджекингом. Чисто теоретически код для ретаргетинга из ВКонтакте вполне можно отнести к кликджекингу. Но пока прецедентов не случалось.
Таргетированная реклама по коду из соцсетей, как я уже писала, – это, пожалуй, самый волнующий вопрос, да оно и понятно. Если рассматривать принцип работы, то он вполне вписывается в схему кликджекинга. Смотрите сами: вы ставите код на сайт, пользователь заходит, смотрит нужные разделы, в это время система подхватывают о нем информацию и собирают его в специальные базы. После чего за пользователем начинает гоняться реклама холодильника, ну или что он там смотрел.
Яндекс напрямую ничего не говорит про код из ВК:
Судя по всему, код ретаргетинга может рассматриваться как кликджекинг, но, скорее всего, для него сделано исключение.
С этим же вопросом я обратилась в службу поддержки ВКонтакте.
Что делать? Использовать спокойно, пока санкций за это не замечено.
Что еще может быть под подозрением:
Конечно, это отнести к кликджекингу нельзя, ведь посетитель сразу видит условия и сам принимает решение, делиться информацией или нет. Да и потом, система не собирает данные о пользователях, вы просто улучшаете шаринг своего контента, не совершая ничего незаконного. Использовать можно.
Всплывающее окно видно, его практически всегда легко закрыть. Пользователь видит форму и сам принимает решение, что делать: оставить контактные данные или закрыть форму и смотреть контент.
У всплывающего окна могут быть несколько другие проблемы: мешает и раздражает, сложно найти кнопку, чтобы закрыть, всплывает несколько раз. Но это не относится к кликджекингу. Использовать можно.
Здесь больше вопросы к юзабилити и удобству сайта. Делайте все гармонично, смотрите, чтобы пользователям было комфортно и интуитивно просто на вашем сайте. Не обманывайте, пусть покупка будет желанной, а не случайной (чтобы гаденького осадочка не осталось). Но в целом лучше не использовать.
Никаких данных в этих случаях о пользователе не собирается дополнительно. К минусам, разве что назойливость можно отметить. Использовать можно, но не для всех тематик подойдет.
Страхи и мифы мы рассмотрели. Теперь коротко скажу, чего стоит опасаться.
Итак, если код, который вы ставите на сайт, будет получать от пользователей данные, которые они самостоятельно не предоставляют (телефон, почту и т.д.), провоцировать действия, которые пользователи не планировали делать и все в таком духе – здесь можно бить в колокола и срочно удалять такие системы увеличения продаж с сайта. В противном случае слетите в органике по всем направлениям.
Каких сервисов точно стоит опасаться?
Пока изучала материалы для статьи, в Сети нашла много упоминаний о сервисах-вредителях, которые доставили использующим их людям массу неприятностей в виде санкций Яндекса.
Делюсь самыми распространенными, чтобы вы не наступили на грабли:
Ну разве заподозришь здесь обманную технологию? На первый взгляд все чинно-благородно и попробовать бесплатно очень хочется. Кстати, приведенный выше список сервисов – далеко не исчерпывающий. Просто посмотрите их, изучите и сторонитесь похожих.
Что делать, если опасаетесь за судьбу своего сайта?
У вас на сайте стоит код стороннего сервиса, и вы не уверены, что это не приведет к последствиям? Яндекс рекомендует смотреть, делает ли сервис обращение к социальным сетям во время работы или нет.
Как проверить? Заходите на сайт, кликаете правой кнопкой мыши, и из выпавшего списка выбираете «исследовать элемент» (Firebug). В открывшимся окне выбираете вкладку «сети» (network) и в формирующемся списке окна проверяем, чтобы не было обращения к соцсетям:
Опасность в том, что часто сервисы, обещающие увеличение продаж («удержим посетителей, догоним ушедших» и т.п.), не распространяются о том, что используют обманную технологию, за которую ваш сайт может попасть под санкции.
Проверяйте! Не будем забывать, что незнание не освобождает от ответственности, а санкции накладываются не на сервис, который вам предоставил код, а на ваш сайт, потому что вы его используете.
Будьте внимательнее к своему бизнесу. Повышайте конверсию честными способами, работайте комплексно над продвижением сайта, уделяйте должное внимание юзабилити и будет вам счастье.
Что такое кликджекинг и как снять фильтр в Яндекс за него
В декабре 2015 года Яндекс ввел новый фильтр, который наказывал за так называемый «кликджекинг». В 2016 году вебмастерам и владельцам сайтов пришлось выводить свои сайты из-под фильтра. В статье мы дадим подробные рекомендации по диагностике и снятию этого фильтра.
Что такое кликджекинг
В Рунете одним из распространенных проявлений кликджекинга стал так называемый «соцфишинг».
Как это работает. Владелец сайта или вебмастер регистрируется в одном из сервисов, использующих соцфишинг, получает код этого сервиса и ставит на свой сайт.
На сайте появляется невидимый слой (фрейм), куда загружается кнопка «Мне нравится» от ВКонтакте, которая следует за курсором. Как только вы где-то кликнете, то автоматически нажмете эту невидимую кнопку. Если вы в браузере авторизованы в социальной сети ВКонтакте, то такое действие поможет сервису определить ваш профиль и получить общедоступные данные профиля (адрес профиля, имя, а также телефон и мейл, если они общедоступны).
После чего эти данные передаются сервису, а он уже продает их владельцу сайта, установившему код. Используя их, вы можете связаться с людьми, которые заходили к вам на сайт. Стоит ли говорить, что они этого не ожидают, ведь они не передавали вам никакие персональные данные?
Результат действия подобного сервиса примерно такой: вам в личные сообщения пишет неизвестный человек и предлагает услугу.
Во всех случаях, что мы видели, подобные сервисы используют именно кликджекинг и Яндекс с этим согласен.
Будьте внимательны! Авторы подобных сервисов могут утверждать, что их скрипт «дружит» с Яндексом, поэтому внимательно изучайте, как работают скрипты, которые устанавливаете себе на сайт. Если сервис предлагает что-то похожее на описанное выше – подумайте и почитайте отзывы о нем.
При этом обычные виджеты соцсетей, конечно же, не являются кликджекингом:
Атаки кликджекинга (clickjacking ) и как их предотвратить
Атаки Clickjacking основаны на визуальных приемах, позволяющих посетителям веб-сайта нажимать на элементы пользовательского интерфейса, которые будут выполнять действия на другом веб-сайте. В этой статье показано, как на практике работают эти атаки и как их предотвратить.
Что такое кликджекинг?
Цель атаки с использованием кликджекинга — заставить ничего не подозревающих посетителей сайта выполнить действия на другом сайте (целевом сайте). Например, пользователя может привлечь веб-сайт, который обещает ему исключительный приз. Когда пользователь нажимает кнопку, чтобы принять приз, его щелчок вместо этого используется для покупки товара на веб-сайте электронной коммерции. Обычно эта атака выполняется путем сокрытия пользовательского интерфейса целевого веб-сайта и организации видимого пользовательского интерфейса таким образом, чтобы пользователь не знал, что щелкнул целевой веб-сайт. Из-за такого расположения пользовательского интерфейса этот вид атаки также известен как атака UI redressing или UI redress attack.
Из-за этого обмана пользователь невольно выполняет такие операции, как перевод денег, покупка продуктов, загрузка вредоносных программ, предоставление лайков в социальной сети и т. д. Но как это работает?
Типы атак кликджекинга
В зависимости от характера конкретной операции подобные атаки могут иметь разные названия. Рассмотрим, например, следующие варианты:
Это лишь некоторые из множества других возможных вариантов кликджекинга. Даже если существует много вариантов, имейте в виду, что основной принцип, на который они опираются, тот же: захват действия пользователя с помощью различных уловок в пользовательском интерфейсе.
Clickjacking в действии
Чтобы понять детали атаки кликджекинга, давайте посмотрим, как это может происходить на практике. Это поможет вам изучить его поведение и разработать стратегию его предотвращения.
Чтобы запустить пример приложения, которое мы будем использовать, вам достаточно установить Node.js на вашем компьютере. Однако принципы, лежащие в основе уязвимости кликджекинга, и стратегии предотвращения не зависят от конкретного языка программирования или фреймворка.
Настройка среды
Начнем с клонирования примера приложения из репозитория GitHub, сопровождающего эту статью. Выполните на своем компьютере следующую команду:
После завершения загрузки установите зависимости проекта, перейдя в папку проекта и выполнив эту команду:
Теперь вы можете запустить уязвимый веб-сайт демонстрационного проекта, набрав следующее:
Наконец, откройте браузер и перейдите по адресу http://localhost:3000. Вы должны увидеть следующую страницу:
В проекте реализована конкретная страница фильмов на фиктивном веб-сайте потоковой передачи фильмов. Помимо возможности транслировать фильм, вы также можете купить соответствующий DVD. Однако для просмотра и покупки фильма вам потребуется сеанс с аутентификацией. Чтобы упростить задачу, в этом проекте не реализован фактический процесс аутентификации. Вы можете смоделировать сеанс с аутентификацией, щелкнув ссылку действительного сеанса в сообщении внизу страницы. После получения смоделированного сеанса пользователя это сообщение исчезнет.
Запуск атаки кликджекинга
Как только веб-сайт фильма будет запущен, мы собираемся запустить на него атаку кликджекинга. Мы запустим другой веб-сайт, веб-сайт злоумышленника, код которого захватит ваш щелчок и перенаправит его на веб-сайт фильма, а вы этого не заметите.
Итак, запустим сайт злоумышленника, выполнив следующую команду в окне терминала:
Затем откройте новую вкладку или новый экземпляр браузера и перейдите по адресу http://localhost:4000. Вы должны увидеть следующую страницу:
Вы можете заметить запрос HTTP POST к конечной точке http://localhost:3000/purchase веб-сайта фильма.
Какая связь между этим сайтом и сайтом фильмов?
Анатомия атаки
Чтобы понять, что произошло, заглянем на страницу злоумышленника. Перейдите в папку views и откройте страницу index.ejs. Тело страницы выглядит следующим образом:
Его содержимое представляет собой шаблон EJS с двумя основными элементами:
Уловка, соединяющая два веб-сайта, выполняется правилами CSS, определяющими положение и видимость этих элементов. Посмотрим на них:
Вы видите, что Accept the prize! Кнопка перекрывает кнопку Buy DVD на веб-сайте фильма.
Свойство z-index завершает работу: невидимый iframe находится над div атакующего. Итак, пользователи думают, что нажимают на кнопку Accept the prize!, но на самом деле они нажимают кнопку Buy DVD.
Теперь, когда вы знаете, как работает атака кликджекинга, должно быть понятно, почему этот метод также известен как UI redressing.
Обратите внимание, что для успешной атаки вам необходимо иметь действующий сеанс на веб-сайте фильма. Однако сама атака не связана с использованием файлов cookie сеанса. Атака может быть проведена даже против веб-сайта, который не требует аутентификации.
Отличия от атаки CSRF
Механизм атаки кликджекинга может быть похож на атаку CSRF, когда злоумышленник отправляет запрос на целевой сервер, используя ваш активный сеанс. Однако это совсем другое.
Фактически, в случае CSRF злоумышленник создает HTTP-запрос и использует сеанс пользователя для отправки его на сервер. В случае кликджекинга пользователь напрямую взаимодействует с целевым веб-сайтом. Атакующий не создает никаких запросов. Запрос, отправленный на целевой сервер, является законным запросом пользователя.
Как предотвратить атаки кликджекинга
Теперь вы знаете, как работают атаки кликджекинга. Давайте рассмотрим, как вы можете предотвратить их и сделать свой сайт безопаснее.
Даже если пример приложения, приведенный в этой статье, является традиционным веб-приложением, учтите, что ядро атаки — это возможность включить любой веб-сайт или приложение в iframe. Это означает, что атака кликджекинга может затронуть любой тип приложения независимо от технологии или инфраструктуры, использованной для его создания. Таким образом, уязвимы не только обычные веб-приложения, но и React, Angular и другие приложения.
То же касается и серверной части приложения.
Защита на стороне клиента
Поскольку атаки с использованием кликджекинга используют iframe, вы можете подумать, что применение какой-то защиты на стороне клиента, которая предотвращает загрузку вашего веб-сайта в iframe, может защитить его. Этот метод, известный как блокировка фреймов, может быть реализован с помощью нескольких строк JavaScript.
Рассмотрите возможность добавления следующего скрипта в заголовок страницы уязвимого веб-сайта:
Если страница уязвимого веб-сайта находится за пределами самого верхнего окна браузера, она перезагружается в верхнем окне. На практике этот сценарий заменяет страницу злоумышленника скрытой страницей, позволяя пользователю разоблачить атаку.
Похоже, на хорошее решение проблемы. Однако у этого подхода есть несколько проблем. Например, некоторые браузеры или надстройки браузера могут блокировать автоматическую перезагрузку. Также злоумышленник может построить свою страницу так, чтобы нейтрализовать эту защиту. Например, злоумышленник может просто добавить на свою страницу следующий скрипт:
Обрабатывая событие onbeforeunload, злоумышленник пытается отключить закрытие текущей страницы. Этот подход может не работать в некоторых браузерах, так как может потребоваться подтверждение пользователя. Но у злоумышленника есть другие варианты. Например, они могут использовать атрибут sandbox для iframe, как показано ниже:
В этом случае злоумышленник указывает, что содержимому iframe разрешено выполнять сценарии (allow-scripts), отправлять формы (allow-forms) и обрабатывать его как принадлежащее к одному источнику (allow-same-origin). Никаких других разрешений не указано, поэтому содержимое iframe не может заменить содержимое верхнего уровня, как это допускало значение allow-top-navigation.
Другими словами, клиентскую защиту от атак clickjacking легко обойти, и она не рекомендуется, кроме как для смягчения проблемы в старых браузерах.
Если вы хотите попробовать эту защиту на стороне клиента и нейтрализацию атакующего, вы можете загрузить адаптированный проект с помощью следующей команды:
Учтите, что, помимо подхода, показанного здесь, существуют другие аналогичные методы, основанные на JavaScript и HTML, которые пытаются предотвратить атаки кликджекинга. Однако в целом попытки на стороне клиента заблокировать атаки кликджекинга обычно не работают, поскольку их легко обойти.
Использование заголовка X-Frame-Options
Лучший подход к предотвращению атак с использованием кликджекинга — попросить браузер заблокировать любую попытку загрузить ваш сайт в iframe. Вы можете сделать это, отправив HTTP-заголовок X-Frame-Options.
Для этого отредактируйте файл server.js, как показано ниже:
Вы настроили Express middleware, которое добавляет HTTP-заголовок X-Frame-Options к каждому ответу браузера. Значение, связанное с этим заголовком ответа, — sameorigin, которое сообщает браузеру, что только страницы одного и того же веб-сайта могут включать эту страницу в iframe.
С этим ограничением злоумышленник не сможет использовать описанную выше технику для захвата кликов пользователей. Вы можете убедиться, что эта защита работает, изменив прозрачность iframe на странице злоумышленника:
После применения этого изменения перезапустите веб-сайт злоумышленника. Вы должны увидеть что-то похожее на следующую картинку:
На этот раз содержимое iframe заблокировано.
Альтернативным значением для заголовка X-Frame-Options является deny, что предотвращает любую попытку поместить страницу во фрейм.
Чтобы попробовать этот подход, вы можете загрузить вариант проекта приложения с помощью следующей команды:
Использование CSP
Все основные браузеры поддерживают заголовок X-Frame-Options. Однако он никогда не был стандартизирован, поэтому могут быть браузеры, не поддерживающие его. Альтернативный стандартный подход к предотвращению атак типа «кликджекинг» — использование определенных директив политики безопасности контента Content Security Policy (CSP).
Например, после восстановления проекта примера приложения в исходное состояние измените содержимое файла server.js следующим образом:
Альтернативные значения для управления внедрением iframe через заголовок Content-Security-Policy:
Чтобы протестировать подход CSP для защиты примера приложения от кликджекинга, загрузите проект, выполнив эту команду:
Использование cookie sameSite origin
Если ваше веб-приложение уязвимо для кликджекинга из-за сеансовых файлов cookie, как в примере приложения, которое поставляется с этой статьей, вы можете защитить его, используя свойство sameSite файлов cookie. В этом случае защита основана не на нарушении поведения iframe, а на предотвращении того, чтобы сеанс был действительным, когда веб-сайт находится в iframe. Учтите, что этот подход не поможет вам, когда действия вашего сайта не зависят от активного сеанса.
Свойство sameSite было введено недавно, поэтому старые браузеры могут его не поддерживать.
Давайте посмотрим, как можно применить этот подход. Восстановите исходный проект, как описано в разделе «Настройка среды», и измените содержимое файла server.js, как показано в следующем фрагменте кода:
Вы просто добавили свойство sameSite со значением «strict» в файл cookie сеанса. Это значение указывает браузеру не отправлять файл cookie сеанса, если запрос поступает из другого домена.
Чтобы убедиться, что пользователь не может завершить покупку через веб-сайт злоумышленника, вам необходимо получить доступ к веб-сайту злоумышленника по адресу http://127.0.0.1:4000. Это необходимо, потому что вы используете одно и то же доменное имя (localhost) как для уязвимого, так и для злоумышленника, а файлы cookie используются независимо от порта. Конечно, в производственной среде у вас не будет этой проблемы.
Чтобы загрузить проект, реализующий эту защиту от кликджекинга, выполните следующую команду:
Заключение
Эта статья познакомила вас с анализом того, как работает кликджекинг-атака, и как вы можете защитить свое веб-приложение, применяя различные подходы. У каждой из предложенных стратегий есть свои преимущества и недостатки. Поскольку первоочередную задачу защиты безопасности можно обойти, лучше всего объединить эти подходы, чтобы в случае сбоя одного из них, скажем, из-за отсутствия поддержки браузера, другая стратегия могла бы добиться успеха.
Для более подробного обсуждения предотвращения кликджекинга вы можете взглянуть на шпаргалку OWASP.