我正在学习Caja,我对“这个”这个概念感到困惑:
Caja解决的另一个安全漏洞称为“此” 窃取 - 如果对象的客户端可以向对象添加方法 状态别名为“this”然后上述受保护的“这个” 规则不适用。
然后他们显示以下构造函数:
function Cell(value) {
this.x_ = "secret";
this.value = value;
}
涉及“x_”的隐藏泄漏:
以下代码可以使表达式显示该秘密值:
(new Cell(
function (){
return this.x_;
})).value()
这是如何工作的?为什么会出现这样的问题?我感谢任何提示或建议。
答案 0 :(得分:2)
简化它:
(new Cell( )).value()
我们正在从Cell构造函数创建一个新对象,并立即调用其value方法。当然,值方法还没有做任何事情,这是我们下一部分的用武之地:
function (){
return this.x_;
}
这是我们作为value
参数传递给构造函数的内容。此函数在Cell构造函数中分配给this.value
。
所以Cell构造函数现在看起来像这样:
function Cell(value) {
this.x_ = "secret";
this.value = function (){
return this.x_;
};
}
那么当您从Cell创建一个新对象并调用其value
成员时会发生什么?来自within的函数返回Cell对象的x_
值,从而显示秘密文本。