我们可以通过以下几种方式创建数组:
var myArray = new Array();
或者:
var myArray = [];
第二种方法比 new Array() 语法更安全,因为 Array 构造函数可以被覆盖并可能被恶意代码替换。
我在许多 JavaScript 书籍中都看到了上述内容,但我不明白Array
构造函数如何被恶意代码覆盖和替换?我正在寻找某人如何做到这一点的示例,以便我了解问题的现实。
我们可以通过以下几种方式创建数组:
var myArray = new Array();
或者:
var myArray = [];
第二种方法比 new Array() 语法更安全,因为 Array 构造函数可以被覆盖并可能被恶意代码替换。
我在许多 JavaScript 书籍中都看到了上述内容,但我不明白Array
构造函数如何被恶意代码覆盖和替换?我正在寻找某人如何做到这一点的示例,以便我了解问题的现实。
上面代码中的某处:
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 = [];
只是更短的符号。
如果你在你的 JS 控制台上写:
[1,2,3]
(就像那样) - 你不能用它做任何事情。
好吧,旧浏览器不准确。
您可以通过以下方式重载数组ctor:
Array = new function (){... }
因此,当您通过 Json(而不是 jsonp)获得您的朋友列表时:-
有人可以使用 XSS/XSF 攻击并窃取您的朋友列表。
事实是:如果你写 [1,2,3] - 实际上有一个 ctor 在这里工作。
因此,如果您访问了一个进行数组响应的网站-他仍然可以列出您的列表。