Чтобы остановить ClickJacking, какой из них более безопасен? выход из iframe против X-Frame-Options для запрета или того же происхождения

Чтобы предотвратить кликджекинг на вашем веб-сайте, я заметил несколько различных методов. Некоторые используют javascript, чтобы ваш веб-сайт вышел из iframe, другое решение - установить для заголовка X-FRAME-OPTIONS значение DENY или SAMEORIGIN. Какой из двух упомянутых мной методов, по вашему мнению, более безопасен? Вот образец страницы, которую я использую для тестирования кликджекинга.

<HTML>
<BODY>
<H1>Clickjacking Test</H1>
<IFRAME SRC="http://www.google.com/" HEIGHT="500" WIDTH="500"></IFRAME>
</BODY>
</HTML>

С кодом прерывания iframe вы увидите, что Firefox и Safari будут медленно выходить из Iframe, что означает, что вы увидите тест Clickjacking, а затем он выйдет из этого iframe и покажет исходный веб-сайт. С IE и Chrome это быстро, что незаметно. Но с решением X-Frame-Optiions вы просто не видите свой веб-сайт. Он будет заблокирован. Как и в случае с Google в приведенном выше примере. Итак, мои вопросы: какое из решений лучше? Полная блокировка или выход из iframe (медленно в 2 браузерах)


person DoodleKana    schedule 12.08.2013    source источник


Ответы (2)


По моему опыту, установка X-Frame-Options (XFO) правил работает намного лучше, чем выход из окон iframe. Когда дело доходит до правил, это действительно зависит от того, обязательно ли вам нужно использовать фреймы. Если вы можете полностью удалить фреймы со своего веб-сайта, лучше всего будет использовать правило DENY; однако, если на вашем сайте все еще есть фреймы, используйте правила SAMEORIGIN.

Различия между доступными правилами описаны ниже (цитата из IETF ):

  1. ОТКАЗАТЬ. Браузер, получающий контент с этим заголовком, НЕ ДОЛЖЕН отображать это содержание ни в каком фрейме.

  2. SAMEORIGIN. Браузер, получающий контент с этим заголовком, НЕ ДОЛЖЕН отображать этот контент в каких-либо фреймах со страницы, происхождение которой отличается от самого контента. Если браузер или подключаемый модуль не может надежно определить, имеют ли происхождение контента и фрейма одно и то же происхождение, это ДОЛЖНО рассматриваться как «ОТКАЗАТЬ». [TBD] текущие реализации не отображаются, если источник контекста просмотра верхнего уровня отличается от источника страницы, содержащей заголовок X-FRAME-OPTIONS.

  3. ALLOW-FROM (за которым следует URI доверенного источника). Браузер, получающий контент с этим заголовком, НЕ ДОЛЖЕН отображать этот контент в каком-либо фрейме со страницы, происхождение которой отличается от указанного в списке. Хотя это может подвергнуть страницу риску со стороны доверенного источника, в некоторых случаях может потребоваться использовать контент из других доменов. Например: X-FRAME-OPTIONS: ALLOW-FROM https://www.domain.com/.

Я также предлагаю прочитать Атака кликджеком - скрытая угроза прямо перед вами Троя Ханта.

Надеюсь это поможет.

person Zorayr    schedule 12.08.2013
comment
@DoodleKana Вы можете использовать подход с поясом и скобами - добавьте заголовок, а также скрипт удаления кадра. Заголовок будет прочитан и заблокирует загрузку фрейма до того, как скрипт станет доступным для браузера, поэтому этот подход будет обратно совместим. Он не говорит, что сценарии могут вводить XSS ... OWASP упоминает, что сценарий перебора кадров можно отключить с помощью IE8 и фильтра XSS Chrome, изменив IFrame src, но поскольку эти браузеры поддерживают XFO, это не должно представлять проблемы. - person SilverlightFox; 13.08.2013
comment
Я прочитал clickjacking_defence_cheat_sheet, и меня заинтриговало решение, которое owasp предлагает в части «Лучший на данный момент сценарий разрыва фрейма устаревшего браузера». В предлагаемом решении тело по умолчанию скрыто. Он отображается только с использованием javascript при соблюдении определенных критериев. Интересно, не влияет ли эта техника на рейтинг сайта, как на рейтинг Google или Bing? - person Pinoy2015; 02.03.2015
comment
Я сомневаюсь, что Google SE примет во внимание содержимое фреймов. - person Zorayr; 02.03.2015

X-Frame-Options - это «правильное» решение, которое решает проблему путем полной блокировки кадрирования. Это лучший метод, но все еще существуют браузеры, которые его не поддерживают (в первую очередь IE ‹8). Так что, чтобы охватить эти случаи, вам понадобится также решение JavaScript .

Есть две проблемы с обработчиками кадров JavaScript:

Во-первых: большинство из них пытается «вырваться» из рамки, заменяя главное окно своим документом. Однако документ злоумышленника в родительском окне может легко сопротивляться навигации, и, хотя есть обходные пути, их можно [всегда обойти сами] Frame Buster Buster ... необходим код блокировки). Если ваш сценарий обнаруживает, что вас подставили, лучшее решение с точки зрения безопасности - сделать всю страницу непригодной для использования, например, с помощью настроек document.body.innerHTML для сообщения об ошибке.

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

Во-вторых: можно предотвратить запуск фреймбастеров, запустив фрейм в iframe с IE _ 3_ attribute или с помощью ложноположительных атак на фильтры XSS, или просто потому, что у пользователя отключен JS. Вы можете обойти это, если страница будет работать только при включенном JavaScript, но это имеет очевидное негативное влияние на доступность.

person bobince    schedule 13.08.2013