# Атака Clickjacking и защита от неё Атака "кликджекинг" (англ. Clickjacking) позволяет хакеру выполнить клик на сайте-жертве *от имени посетителя*. В русском языке встречается дословный перевод термина clickjacking: "угон клика". Так же применительно к clickjacking-атаке можно встретить термины "перекрытие iframe" и "подмена пользовательского интерфейса". Кликджекингу подверглись в своё время Twitter, Facebook , PayPal, YouTube и многие другие сайты. Сейчас, конечно, они уже защищены. [cut] ## Идея атаки В целом идея очень проста. Вот как выглядел "угон клика" пользователя, который зарегистрирован на Facebook:
  1. На вредоносной странице пользователю подсовывается безобидная ссылка (скажем, что-то скачать, "разбогатеть сейчас", посмотреть ролик или просто перейти по ссылке на интересный ресурс).
  2. Поверх этой заманчивой ссылки помещен прозрачный iframe со страницей facebook.com, так что кнопка "Like" находится чётко над ней.
  3. Кликая на ссылку, посетитель на самом деле нажимает на эту кнопку.
## Демо Вот пример вредоносной страницы (для наглядности `iframe` -- полупрозрачный): ```html
Нажмите, чтобы разбогатеть сейчас:
*!* */!*
..И всё получится (хе-хе, у меня, злого хакера, получится)!
``` В действии: [codetabs src="clickjacking-visible" height=200] Так как ` ``` Есть и другие приёмы для обхода этой простейшей защиты. Firefox и старый IE могут активировать designMode на исходной странице, это также предотвращает framebusting, у IE есть нестандартный атрибут [security](https://msdn.microsoft.com/en-us/library/ie/ms534622.aspx) для ифреймов, который можно использовать с той же целью. Как мы видим, эта защита не только не выдерживает реальной атаки, но и может скомпрометировать сайт (программист-то думает, что защитил его). ## Заголовок X-Frame-Options Все современные браузеры поддерживают заголовок `X-Frame-Options`. Он разрешает или запрещает отображение страницы, если она открыта во фрейме. Браузеры игнорируют заголовок, если он определен в МЕТА тег. Таким образом, `` будет проигнорирован. У заголовка может быть три значения:
SAMEORIGIN
Рендеринг документа, при открытии во фрейме, производится только в том случае, когда верхний (top) документ -- с того же домена.
DENY
Рендеринг документа внутри фрейма запрещён.
ALLOW-FROM domain
Разрешает рендеринг, если внешний документ с данного домена (не поддерживается в Safari, Firefox).
К примеру, Twitter использует `X-Frame-Options: SAMEORIGIN`. Результат: ```html ``` В зависимости от браузера, `iframe` выше либо пустой, либо в нём находится сообщение о невозможности отобразить его (IE). ## Показ с отключённым функционалом Заголовок `X-Frame-Options` имеет неприятный побочный эффект. Иногда поисковики, анонимайзеры или другие сайты хотели бы отобразить страницу в `iframe`, по вполне "легальным" причинам, но не могут. Хорошо бы показывать их посетителям не пустой `iframe`, а нечто, что может быть более интересно. Например, можно изначально "накрывать" документ `div` с `height:100%;width:100%`, который будет перехватывать все клики. И поставить на нём ссылку, ведующую на страницу в новом окне. ```html
Перейти на сайт
``` Если страница -- не во фрейме или домен совпадает, то посетитель не увидит его. ## Заключение Атаку "Clickjacking" легко осуществить, если на сайте есть действие, активируемое с помощью одного клика. Злоумышленник может осуществить атаку через целенаправленно на посетителей ресурса -- опубликовав ссылку на форуме, или "счастливой рассылкой". Существует масса вариантов. С первого взгляда, она "неглубокая": всё, что можно сделать -- это один клик. С другой стороны, если хакер знает, что после клика появляется какой-то другой управляющий элемент, то он, хитрыми сообщениями, может заставить посетителя кликнуть и по нему. А это уже не один, а два клика. Атака особенно опасна, поскольку, проектируя интерфейс сайта, обычно никто и не задумывается о том, что клик от имени юзера может сделать хакер. Точки уязвимости могут быть в совершенно непредсказуемых местах.