Предотвращение дочернего iframe от "взлома рамки"

Я делаю простую работу по веб-интеграции, которую я выполняю с помощью iframe. В моем главном окне есть javascript, который взаимодействует с моим сервером, чтобы перенаправить iframe на требуемый URL. К сожалению, одна из целевых страниц имеет следующий фрагмент кода:

if (top.location != location) {
    top.location.href = document.location.href ;
}

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

Как я могу обойти это?

Спасибо

Ответ 1

Это мой первый пост, поэтому не мусор меня, если он не работает, но это исправление, похоже, работает для меня в IE. Добавьте к вашему фрейму security = "limited".

Пример:

<iframe id="frame_id" name="frame_name" security="restricted" src="page.html">  
</iframe>

Изменить: я нашел лучшее решение. Это не блокирует скрипты и не требует javascript. Попробуйте использовать sandbox = "..."

  • allow-forms позволяет отправить форму
  • allow-popups позволяет всплывающие окна
  • allow-pointer-lock позволяет блокировать указатель
  • allow-same-origin позволяет документу сохранять исходный код
  • allow-scripts позволяет выполнять JavaScript, а также позволяет автоматически запускать функции
  • allow-top-navigation позволяет документу выйти из кадра, перейдя в окно верхнего уровня

Верхняя навигация - это то, что вы хотите предотвратить, поэтому оставьте это, и оно не будет разрешено. Все, что осталось, будет заблокировано

ех.

<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"></iframe>

Ответ 2

Существует метод, чтобы отключить код busting, как обсуждалось в более новом вопросе SO:

Как оказалось, ваш код разбиения на фрейм может быть перегружен, как показано здесь:

<script type="text/javascript">
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
      if (prevent_bust > 0) {  
        prevent_bust -= 2  
        window.top.location = 'http://server-which-responds-with-204.com'  
      }  
    }, 1)  
</script>

Этот код выполняет следующие действия:

  • увеличивает счетчик каждый раз, когда браузер пытается перейти от текущей страницы с помощью обработчика событий window.onbeforeonload
  • устанавливает таймер, который запускает каждую миллисекунду с помощью setInterval(), и если он видит, что счетчик увеличивается, изменяется текущее местоположение на сервер управления злоумышленником.
  • этот сервер обслуживает страницу с кодом статуса HTTP 204, что не приводит к тому, что браузер будет перемещаться в любом месте

Ответ 3

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

Как относиться к трафику, который перехватывает javascript с кадрами?

В терминах netiquet сценарии кадровой проверки на самом деле являются большими, нет-нет, именно по этой причине.

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

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

Я хочу, чтобы другие веб-мастера уважали такой сетевой этикет.

Ответ 4

После долгих поисков я разработал простой трюк. Я создал фиктивную страницу на моем собственном сайте, к которому обратился i-кадр. Затем у меня был i-фрейм на фиктивной странице, в котором требовалось, чтобы сайт вышел из фреймов. Он вырвался из первого кадра, но поскольку фиктивная страница была на моем сайте, она оставалась аккуратно в кадре верхней страницы. violla