Сообщение от 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 );