Предотвращение перебора кадров с доступом к источнику страницы - PullRequest
1 голос
/ 17 декабря 2010

Итак, мы загружаем страницу в iframe.Эта дочерняя страница загружается из кэша в том же домене, что и родительский.Однако внешние ресурсы не кэшируются локально и загружаются с внешнего сайта, включая javascript.На одном сайте у нас есть код перебора кадров:

if (top.location != self.location) {

    top.location = self.location
}

Теперь я знаю, что мы могли бы использовать решение из coderr , но я не уверен, что последствия / стук в проблемах,Учитывая, что у нас есть доступ к кешированной дочерней странице, мне интересно, есть ли что-нибудь, что мы можем добавить к дочернему элементу, чтобы переопределить какие-либо методы или значения, чтобы сделать нулевым сброс фрейма.Например, в <head> ребенка я пытался добавить это:

<script type="text/javascript">
    top.location = self.location
</script>

и

self.location = top.location

с довольно ужасными результатами (бесконечное вложение в первом примере, полное и полное падение браузераво втором).

Есть ли какие-либо предложения по коду, который мы могли бы добавить к дочернему элементу, чтобы аннулировать очистку от фреймов?

Иначе нам придется кэшировать js и анализировать / заменять сброс фреймов.сценарий.

Спасибо

Р.

И пожалуйста - это законно !!

Ответы [ 2 ]

4 голосов
/ 17 декабря 2010

Некоторое время назад я наткнулся на очень интересный пост Джеффа Этвуда, в котором он рассказывает о "невозможном" противодействии методам снятия рамки:

http://www.codinghorror.com/blog/2009/06/we-done-been-framed.html

Itдаже не требует привилегированного доступа к коду дочернего фрейма!

0 голосов
/ 05 ноября 2016

Простая замена текста с помощью Tampermonkey

document.body.innerHTML = document.body.innerHTML.replace(/original/g,"new");

Если вы используете версию регулярного выражения (замените все вхождения в документе), вам нужно экранировать специальные символы, такие как / и * 1007.* с символом \.

Для замены только одного вхождения:

var find = "if (top.location!=location) { top.location.href = location.href; }";
replace = "";
document.body.innerHTML = document.body.innerHTML.replace(find,replace);

Это не будет работать на страницах с <script> наочень верх, вверх головой.

Убедитесь, что @run-at document.start установлен.

...