Я учусь о Caja, и я смущен о понятии «это» -с применения:JavaScript уязвимости - «это» -с применения:
Другой уязвимость безопасности Каха адрес называется «этим « кража - если клиенты объекта могут добавлять методы к состоянию объекта , которое, как и его« это », тогда вышеупомянутое защищенное« это »правило не применяется.
Затем они показывают следующий конструктор:
function Cell(value) {
this.x_ = "secret";
this.value = value;
}
Там скрытая утечка с участием "x_":
Следующий код может сделать выражение показывает, что тайное значение:
(new Cell(
function(){
return this.x_;
})).value()
Как это работает? Почему это такая проблема? Я ценю любые советы или советы.
Thank You Very Much Jonathan - Я получил его сейчас! JavaScript довольно мощный! – Coffee
Если я хочу быть «x_» секретом, я объявляю его «var x_ =» secret »;', а не как 'this.x_ =" secret ";'. В этом случае «атака» перестает работать. Все, что я связываю с 'this' в конструкторе объекта, по определению * не является секретом. Я могу даже перечислить его свободно с помощью 'for .. in', без необходимости наклоняться назад, чтобы увидеть его значение. Я не понимаю - где смысл всего этого? – Tomalak
@Tomalak Мне было интересно об этом. Код из книги определенно представляет лучший пример, но ясно, что это за намерение. – Sampson