Предотвращение перебора кадров с доступом к источнику страницы

Итак, мы загружаем страницу в 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 и разобрать / заменить скрипт framebusting.

Спасибо

Р.

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

2 ответа

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

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

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

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

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

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

Чтобы заменить только одно вхождение:

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 установлено.

Другие вопросы по тегам