Разбивка фрейма только междоменная, но не для фреймов того же происхождения? - PullRequest
3 голосов
/ 29 сентября 2010

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

Если на сайте есть фреймы, и кто-то хочет предотвратить их закрытиев кадре из другого домена упрощенная очистка кадров не будет полезна:

<script>if (top != self) top.location = location</script>

Однако, поскольку межкадровый сценарий для других доменов должен генерировать исключения, что-то вроде этого хорошо работает внутри iframe:

<script>
try {
  if (window.document.domain != top.document.domain) {   // throws exception
    throw "You naughty puppy!"; // Should not ever get here, right?
  }
}
catch () {
  top.location = "/error/naughtypuppy";
}
</script>

Выше if должно быть достаточно для предотвращения междоменной компоновки фреймов.Он должен только когда-либо возвращать false или выдавать исключение, так что есть ли сценарий, который может достичь оператора throw в браузере?

Будет ли этого достаточно, чтобы предотвратить создание кадров только из других доменов?*

<script>
try {
  var bogus = top.document.domain;
}
catch () {
  top.location = "/error/naughtypuppy";
}
</script>

Редактировать: здесь намекают на подобное решение, но нельзя полагаться на родительский фрейм для включения кода перебора фреймов. Определить, когда iframe является междоменным, а затем удалить его .По сути то же решение, что и «попытаться получить доступ к другому фрейму и перебрать, если возникнет исключение».

Ответы [ 2 ]

2 голосов
/ 15 ноября 2010

Этот код уязвим для такой формы атаки, которая использует функцию "onbeforeunload". На родительской (злой) странице устанавливается интервальный обработчик (который неуязвим для вашего кода из-за различий в домене) и обработчик «onbeforeunload». Второй обработчик просто обновляет некоторую глобальную переменную (также неуязвимую), чтобы записать тот факт, что окно «находится под атакой», а затем интервальный таймер (работает достаточно быстро, чтобы он мог активироваться до того, как браузер завершит работу с внешним окном). обновится до ваш законный URL-адрес) и обновит window.location, чтобы указать на какой-то контролируемый злоумышленником URL-адрес, который возвращает неактивный ответ 204. Браузер забывает о вашем HTTP-запросе и «обновляет» окно из этой новой транзакции, инициированной обработчиком интервала.

Вот старый вопрос SO: Frame Buster Buster ... необходим код Buster

1 голос
/ 03 октября 2014

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

<style>html { display:none }</style>
<script>
if (self == top) {
  document.documentElement.style.display = 'block';
} else {
  top.location = self.location;
}
</script> 

По этой ссылке: XFS 101-кросс-фрейм-объяснение-объяснение

На основе презентации: OWASP_AppSec_Research_2010_Busting_Frame_Busting_by_Rydstedt

Вот более обновлённый OWasp Страница с кликбэком

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...