一个JavaScript漏洞 - "这个" -stealing:

时间:2012-04-28 04:49:10

标签: javascript google-caja

我正在学习Caja,我对“这个”这个概念感到困惑:

  

Caja解决的另一个安全漏洞称为“此”   窃取 - 如果对象的客户端可以向对象添加方法   状态别名为“this”然后上述受保护的“这个”   规则不适用。

然后他们显示以下构造函数:

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

涉及“x_”的隐藏泄漏:

以下代码可以使表达式显示该秘密值:

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

这是如何工作的?为什么会出现这样的问题?我感谢任何提示或建议。

1 个答案:

答案 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_值,从而显示秘密文本。