数组构造函数“new Array()”可以被覆盖并替换为恶意代码,如何?

时间:2013-11-27 05:26:36

标签: javascript arrays javascript-security

我们可以通过以下几种方式创建数组:

var myArray = new Array();

或者:

var myArray = [];

第二种方法比新的Array()语法更安全,因为Array构造函数可以被覆盖并可能被恶意代码替换。

我在许多JavaScript书籍中都看到过以上几行,但我不明白如何覆盖Array构造函数并用恶意代码替换?我正在寻找一个人如何做到这一点的例子,这样我才能理解这个问题的实际情况。

2 个答案:

答案 0 :(得分:1)

如果你在JS控制台上写字:

[1,2,3]

(就像那样) - 你无能为力。

对于旧浏览器来说,这是不准确的。

您可以通过以下方式重载数组ctor:

Array = new function (){... }

所以,当你通过Json(而不是jsonp)得到你的朋友名单时: -

有人可能会使用XSS / XSF攻击并窃取您的朋友列表。

事情是这样的事实:如果你写[1,2,3] - 实际上有一个ctor在这里工作。

所以如果你到了一个做阵列响应的网站 - 他仍然可以列出你的名单。

答案 1 :(得分:1)

上面代码中的某处:

Array.prototype.forEach = function (e){
  console.log("something wrong there");
  return(e);
};

以下代码中的某处:

var i = [1,2,3,4,5];
i.forEach(function(e){
  console.log(e);
});

输出:

>"something wrong there"

如您所见,初始化数组变量没有区别。 var i = [];只是更短的符号。