Показать сообщение отдельно
  #33 (permalink)  
Старый 29.10.2012, 15:59
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от DjDiablo
Сорри но чем createElement или .appendChild от toString отличается ? что мешает подменить и их ?
мешает сеттер на innerHTML у элементов
var bad = function () { return "LOL"; }; // so sarcastic

// все они не помечены как readonly, но некоторые из них FF их менять не хочет.
// в хроме всё взламывается :)
document.createElement = Document.prototype.createElement = bad;
HTMLElement.prototype.insertAdjacentHTML = bad;

alert(document.createElement); // :((

// начинаем мстить.

// 1. получаем ГО - обычный window может прокатить : 
var win = window;

// window.document -> readonly!
// 2. получаем document.
var doc = win.document; // в doc - тёплый и мягкий экземпляр Document.

// document.body -> readonly!
// 3. получаем наконец-то элемент
var body = doc.body;

// 4. меняем innerHTML (надо бы менять не body'евский, а чей-нибудь другой)
//  и прокалываем фрейму ухо, чтобы можно было его опознать.
var id = "secret_" + (Math.random()*1e6|0);
body.innerHTML += '<iframe id="' + id + '"></iframe>';

// document.body.children -> readonly!
// 5. проходимся по детям и находим наш фрейм.
var myFrame;
for (var i = 0; i < body.children.length; i++) {
    if (body.children[i].id === id) {
        myFrame = body.children[i];
        break;
    }
}

// 6. PROFIT!!!
var normalWindow = myFrame.contentWindow;
var normalDocument = normalWindow.document;

alert( normalDocument.createElement );

Последний раз редактировалось melky, 29.10.2012 в 16:04.
Ответить с цитированием