一个 JavaScript 漏洞 - “this”-stealing:

A JavaScript vulnerability - "this"-stealing:

本文关键字:-stealing this JavaScript 漏洞 一个      更新时间:2023-09-26

我正在学习Caja,我对"this"的概念感到困惑 - 窃取:

Caja解决的另一个安全漏洞称为"this" 窃取 – 如果对象的客户端可以向对象的 说明其别名"this",然后是上述受保护的"this" 规则不适用。

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

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

有一个涉及"x_"的隐藏泄漏:

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

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

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

简化它:

(new Cell( )).value()

我们正在从 Cell 构造函数创建一个新对象,并立即调用其值方法。当然,价值方法还没有做任何事情,这就是我们下一部分的用武之地:

function (){ 
  return this.x_; 
}

这就是我们作为 value 参数传递给构造函数的内容。此函数分配给 Cell 构造函数中的this.value

因此,Cell 构造函数现在实际上如下所示:

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

那么,当您从 Cell 创建一个新对象并调用其value成员时会发生什么?内部函数返回 Cell 对象的x_值,从而显示机密文本。