Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组构造函数";新数组();可以被恶意代码覆盖和替换,如何?_Javascript_Arrays_Javascript Security - Fatal编程技术网

Javascript 数组构造函数";新数组();可以被恶意代码覆盖和替换,如何?

Javascript 数组构造函数";新数组();可以被恶意代码覆盖和替换,如何?,javascript,arrays,javascript-security,Javascript,Arrays,Javascript Security,我们可以通过以下几种方式创建阵列: var myArray = new Array(); 或: 第二种方法比新的Array()语法更安全,因为数组构造函数可能被覆盖,并可能被恶意代码替换 我在很多JavaScript书籍中都看到了上面几行,但我不明白Array构造函数如何被恶意代码覆盖和替换?我正在寻找一个例子,说明某人如何做到这一点,以便我能够了解问题的真实性。如果您在JS控制台上编写: [1,2,3] (就像那样)-你对此无能为力 对于旧浏览器来说,这并不准确 您可以通过以下方式重载阵列选

我们可以通过以下几种方式创建阵列:

var myArray = new Array();
或:

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


我在很多JavaScript书籍中都看到了上面几行,但我不明白
Array
构造函数如何被恶意代码覆盖和替换?我正在寻找一个例子,说明某人如何做到这一点,以便我能够了解问题的真实性。

如果您在JS控制台上编写:

[1,2,3]

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

对于旧浏览器来说,这并不准确

您可以通过以下方式重载阵列选择器:

Array=new函数(){…}

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

有人可能使用XSS/XSF攻击窃取您的好友列表

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


因此,如果你访问一个提供数组响应的网站,他仍然可以保存你的列表。

如果你在JS控制台上写:

[1,2,3]

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

对于旧浏览器来说,这并不准确

您可以通过以下方式重载阵列选择器:

Array=new函数(){…}

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

有人可能使用XSS/XSF攻击窃取您的好友列表

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


因此,如果你访问了一个提供数组响应的网站,他仍然可以保存你的列表。

上面代码中的某个地方:

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"

正如您所看到的,如何初始化数组变量没有区别<代码>变量i=[]只是较短的符号。

上面代码中的某个地方:

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"

正如您所看到的,如何初始化数组变量没有区别<代码>变量i=[]只是较短的符号。

在今天的浏览器中,你对ctor无能为力。你说的ctor是什么意思?小弗雷迪是在他的网站上添加用户生成的未过滤html吗?坏孩子弗雷迪会受到惩罚的!如果您的代码可以被注入恶意代码,那么您要处理的问题比
Array()
@Jack更大。如果第三方库托管在不同的服务器上,并且它们被注入了恶意数组函数,该怎么办。不完全是你的问题,但又是你的问题。总之,机会很小。在今天的浏览器中,你对ctor无能为力。你说的ctor是什么意思?小Freddy是在他的网站上添加用户生成的未过滤html吗?坏孩子弗雷迪会受到惩罚的!如果您的代码可以被注入恶意代码,那么您要处理的问题比
Array()
@Jack更大。如果第三方库托管在不同的服务器上,并且它们被注入了恶意数组函数,该怎么办。不完全是你的问题,但又是你的问题。总而言之,机会微乎其微。