1

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

var myArray = new Array();

或者:

var myArray = [];

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

我在许多 JavaScript 书籍中都看到了上述内容,但我不明白Array构造函数如何被恶意代码覆盖和替换?我正在寻找某人如何做到这一点的示例,以便我了解问题的现实。

4

2 回答 2

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 = [];只是更短的符号。

于 2013-11-27T05:40:38.900 回答
0

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

[1,2,3]

(就像那样) - 你不能用它做任何事情。

好吧,旧浏览器不准确。

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

Array = new function (){... }

因此,当您通过 Json(而不是 jsonp)获得您的朋友列表时:-

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

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

因此,如果您访问了一个进行数组响应的网站-他仍然可以列出您的列表。

于 2013-11-27T05:35:41.057 回答