2012-04-28 2 views
2

Я учусь о Caja, и я смущен о понятии «это» -с применения:JavaScript уязвимости - «это» -с применения:

Другой уязвимость безопасности Каха адрес называется «этим « кража - если клиенты объекта могут добавлять методы к состоянию объекта , которое, как и его« это », тогда вышеупомянутое защищенное« это »правило не применяется.

Затем они показывают следующий конструктор:

function Cell(value) { 
    this.x_ = "secret"; 
    this.value = value; 
} 

Там скрытая утечка с участием "x_":

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

(new Cell(
    function(){ 
    return this.x_; 
    })).value() 

Как это работает? Почему это такая проблема? Я ценю любые советы или советы.

ответ

2

упрощать:

(new Cell()).value() 

Мы создаем новый объект из конструктора Cell, и сразу же вызова метода значение. Конечно, метод значение не делает ничего еще, что, где наша следующая часть приходит в:

function(){ 
    return this.x_; 
} 

Это то, что мы передаем в конструктор в качестве параметра value. Эта функция назначается this.value в конструкторе Ячейки.

Так конструктор Cell эффективно будет выглядеть так:

function Cell(value) { 
    this.x_ = "secret"; 
    this.value = function(){ 
    return this.x_; 
    }; 
} 

Так что же происходит, когда вы создаете новый объект из ячейки, и называют его value членом? Функция изнутри возвращает значение Объекта ячейки x_, тем самым раскрывая секретный текст.

+1

Thank You Very Much Jonathan - Я получил его сейчас! JavaScript довольно мощный! – Coffee

+1

Если я хочу быть «x_» секретом, я объявляю его «var x_ =» secret »;', а не как 'this.x_ =" secret ";'. В этом случае «атака» перестает работать. Все, что я связываю с 'this' в конструкторе объекта, по определению * не является секретом. Я могу даже перечислить его свободно с помощью 'for .. in', без необходимости наклоняться назад, чтобы увидеть его значение. Я не понимаю - где смысл всего этого? – Tomalak

+0

@Tomalak Мне было интересно об этом. Код из книги определенно представляет лучший пример, но ясно, что это за намерение. – Sampson

Смежные вопросы