iFrame плавающий фрейм

iFrame (Inline Frame, фрейм)— это код HTML, используемый для встраивания интерактивных медиа, сторонних страниц в ваш сайт. iFrame создает плавающий фрейм (отдельное окно html документа), который находится внутри обычного документа, он позволяет загружать в область заданных размеров любые другие независимые документы, видео и интерактивные медиафайлы на вашу страницу.

Фрейм может интегрировать контент в любом месте на вашей странице, без необходимости включать их в структуру веб-макета, как традиционный элемент.

iFrame современная реализация тега <frame>, <frame> был объявлен устаревшим в HTML 5.

Где используют фреймы

  1. Встроенные видео, презентации и прочий визуальный контент.
  2. Для создания фонового трафика через партнерские программы для накрутки посещений, которые фиксируются системами аналитики и завышают результаты трафика.
  3. Web-дизайн - встраивается анимация, видео и прочий медиа контент.
  4. Приложения служб поддержки.
  5. Встраивание апплетов — приложений, работающих в контексте веб-сайта, например, формы оплаты или интерактивные карты.

Как использовать іFrame и его атрибуты

<iframe src="ссылка на нужный тебе сайт" width="ширина"
 height="высота" border="рамка" align="размещение фрейма">
Здесь пишешь текст, который увидят посетители,
если их браузер не поддерживает фреймы
</iframe>

Атрибуты тега iframe:

  • Тег <iframe>…</iframe> контейнер в котором вы поисывае что хотите подгрузить на свою страницу, например видео с ЧаВо о каналах на YouTube.
  • Источник іFrame (src) является источником контента с внешнего или внутреннего сервера.
  • Width и height — это соотношение сторон кадра. Вы можете вставить фиксированные размеры, такие как 680 × 480 пикселей (px). Или вы можете использовать метод на основе процента (10% -100%) для автоматической настройки іFrame.

iFrame и SEO

По своей природе элемент іFrame не представляет никакой угрозы безопасности для вашей веб-страницы или ваших читателей. Частично, он был разработан, чтобы помочь создателям контента добавлять визуально привлекательный материал для читателей. Тем не менее, вам нужно обратить внимание на надёжность сайта при добавлении іFrame.

Использование тега iFrame зачастую рискованно получением фильтра, потому что сайт перестает полностью контролировать содержимое документа, так как его часть подгружается с другого сайта. Так как вы перестаёте контролировать содержимое, то через iframe возможна подгрузка нежелательного контента (18+, вирусы и так далее), что и может привести к санкциям от поисковых систем.

Атака типа clickjacking или зачем X-Frame-Options

Атака типа clickjacking (англ. «захват клика») позволяет вредоносной странице кликнуть по сайту-жертве от имени посетителя. Многие сайты были взломаны подобным способом, включая Twitter, Facebook, Paypal и другие. Все они, конечно же, сейчас защищены.

Идея этой атаки очень проста. Вот как clickjacking-атака была проведена на Facebook:

  1. Посетителя заманивают на вредоносную страницу (неважно как).
  2. На странице есть ссылка, которая выглядит безобидно (например, «Разбогатей прямо сейчас» или «Нажми здесь, это очень смешно»).
  3. Поверх этой ссылки вредоносная страница размещает прозрачный <iframe> с src с сайта facebook.com таким образом, что кнопка «like» находится прямо над этой ссылкой. Обычно это делается с помощью z-index в CSS.
  4. При попытке клика на эту ссылку посетитель на самом деле нажимает на кнопку.

Вот так выглядит вредоносная страница. Для наглядности <iframe> полупрозрачный (на реальных вредоносных страницах он полностью прозрачен):

<!doctype html>
<body>
<style>
iframe { /* ифрейм с сайта-жертвы */
  width: 400px;
  height: 100px;
  position: absolute;
  top:0; left:-20px;
  opacity: 0.5; /* в реальности opacity:0 */
  z-index: 1;
}
</style>
 
<div>Нажми, чтобы разбогатеть:</div>
 
<!-- Url с сайта-жертвы -->
<iframe src="/clickjacking/facebook.html"></iframe>
 
<button>Нажмите сюда!</button>
 
<div>...И всё будет супер (у меня, хакера)!</div>
</body>

Здесь у нас есть полупрозрачный <iframe src="facebook.html">, и в примере мы видим его висящим поверх кнопки. Клик на кнопку фактически кликает на ифрейм, но этого не видно пользователю, потому что ифрейм прозрачный.

В результате, если пользователь авторизован на сайте Facebook («Запомнить меня» обычно активировано), то он добавляет «лайк». В Twitter это будет кнопка «читать», и т.п.

Всё, что нам необходимо для атаки — это расположить <iframe> на вредоносной странице так, чтобы кнопка находилась прямо над ссылкой. Так что пользователь, кликающий по ссылке, на самом деле будет нажимать на кнопку в <iframe>. Обычно это можно сделать с помощью CSS-позиционирования.

Заголовок X-Frame-Options со стороны сервера может разрешать или запрещать отображение страницы внутри фрейма.

Это должен быть именно HTTP-заголовок: браузер проигнорирует его, если найдёт в HTML-теге <meta>. Поэтому при <meta http-equiv="X-Frame-Options"…> ничего не произойдёт.

Заголовок может иметь 3 значения:

  1. DENY Никогда не показывать страницу внутри фрейма.
  2. SAMEORIGIN Разрешить открытие страницы внутри фрейма только в том случае, если родительский документ имеет тот же источник.
  3. ALLOW-FROM domain Разрешить открытие страницы внутри фрейма только в том случае, если родительский документ находится на указанном в заголовке домене.

Атака сlickjacking – это способ хитростью «заставить» пользователей кликнуть на сайте-жертве, без понимания, что происходит. Она опасна, если по клику могут быть произведены важные действия.

Хакер может разместить ссылку на свою вредоносную страницу в сообщении или найти другие способы, как заманить пользователей. Вариантов множество.

С одной стороны — эта атака «неглубокая», ведь хакер перехватывает только один клик. Но с другой стороны, если хакер знает, что после этого клика появятся другие элементы управления, то он может хитростью заставить пользователя кликнуть на них.

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

Для защиты от этой атаки рекомендуется использовать X-Frame-Options: SAMEORIGIN на страницах или даже целиком сайтах, которые не предназначены для просмотра во фрейме.

Если вы хотите в NginX задать X-Frame-Options для всех сайтов, добавьте строку в раздел http {} файл nginx.conf

add_header X-Frame-Options "SAMEORIGIN" always;

Apache:

Header always set X-Frame-Options "SAMEORIGIN"

Проверяем стандартно утилитой curl:

curl -I https://wow2.top
...
x-frame-options: SAMEORIGIN
PQ VPS сервера в 28+ странах.