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