Framekiller - Framekiller

А убийца кадров (или же фреймбастер или же фреймворк) - метод, используемый веб-сайты и веб-приложения чтобы предотвратить их веб-страница от отображения в Рамка. Фрейм - это часть окна веб-браузера, которая может действовать как меньшее окно. Фреймкиллер обычно используется для предотвращения загрузки веб-сайта из набора фреймов без разрешения или в качестве атаки, как с кликджекинг.

Реализации

Фреймкиллеры реализованы с использованием JavaScript который проверяет, является ли текущее окно главным окном. Рекомендуемый подход - заблокировать рендеринг окна по умолчанию и разблокировать его только после подтверждения, что текущее окно является основным:

<стиль>html{отображать:никто;}</ стиль><сценарий>   если (себя == верх) {       документ.documentElement.стиль.отображать = 'блокировать';    } еще {       верх.место расположения = себя.место расположения;    }</ скрипт>

Этот подход был предложен в 2010 году Густавом Ридштедтом, Эли Бурштейн, Дэн Бонех и Коллин Джексон в статье, в которой подчеркнули ограничения существующих методов удаления кадров, а также методы, позволяющие их обойти.[1]

Альтернативные решения

Альтернативный выбор - позволить пользователю определять, разрешить ли фреймкиллеру работать.

вар убийца кадров = ложный;окно.перед выгрузкой = функция() {   если (убийца кадров) {    возвращаться "...";  // любое сообщение, которое помогает пользователю принять решение  }};

и код ниже должен быть добавлен после тега кадра:

// "my_frame" следует изменить в соответствии с реальным идентификатором кадра на вашей странице документ.getElementById("my_frame").в процессе = функция() {   убийца кадров = истинный;};

Оригинальные фреймкиллеры

Исторически сложилось так, что первые скрипты framekiller были такими простыми:

<сценарий тип="текст / javascript">  если (верх != себя) верх.место расположения.заменять(место расположения);</ скрипт>

Логика здесь заключалась в том, чтобы отобразить страницу, но проверить, совпадает ли верхнее расположение с текущей страницей, и заменить верхнее текущим, если нет. Однако этот метод можно легко обойти, заблокировав выполнение сценария блокировки кадров из внешнего кадра.[1]

Ограничения Framekiller

Клиентский JavaScript решение полагается на браузер конечного пользователя, обеспечивающий их собственную безопасность. Это делает его полезным, но ненадежным средством запрета встраивания вашей страницы в другие страницы. Следующие ситуации могут сделать приведенный выше сценарий бесполезным:

  • Пользовательский агент не поддерживает JavaScript.
  • Пользовательский агент поддерживает JavaScript, но пользователь отключил поддержку.
  • Поддержка JavaScript пользовательского агента некорректна или реализована частично.

Антифреймкиллер

В iframe в HTML5 есть песочница атрибут.[2] Значение атрибута - это набор разрешенных возможностей для содержимого iframe. Если значение пустое или не задано, содержимое iframe не будет выполнять JavaScript и не разрешит навигацию верхнего уровня. Указав разрешить скрипты в наборе исключений, разделенных пробелами, в значении iframe разрешит использование JavaScript, но по-прежнему будет запрещать навигацию верхнего уровня, отображая фреймкиллеры в iframe бессильными.

Смотрите также

  • Кликджекинг - обсуждает более сложные методы предотвращения внедрения во фрейм, такие как заголовок X-Frame-Options

Рекомендации

  1. ^ а б Г. Ридштедт; Э. Бурштейн; Д. Бонех; К. Джексон (2010). "Busting Frame Busting: исследование уязвимостей, связанных с кликджекингом на популярных сайтах". 3-й семинар по безопасности и конфиденциальности Web 2.0. IEEE.
  2. ^ «Архивная копия». Архивировано из оригинал на 2013-06-06. Получено 2014-11-01.CS1 maint: заархивированная копия как заголовок (связь)