为什么Javascript中的Symbol.isConcatSpreadable是不可写的?
可在以下文档中找到:为什么Javascript中的Symbol.isConcatSpreadable是不可写的?,javascript,security,properties,Javascript,Security,Properties,可在以下文档中找到: Writable: no Enumerable: no Configurable: no 但我可以改变它的价值: var a = [1, 2, 3]; undefined a[Symbol.isConcatSpreadable]=false; false [4, 5, 6].concat(a); (4) [4, 5, 6, Array(3)] 看起来您正在更改数组的值实际上,a。。。然而,Symbol.isConcatSpreadable未被更改。它的数据类型很可能是
Writable: no
Enumerable: no
Configurable: no
但我可以改变它的价值:
var a = [1, 2, 3];
undefined
a[Symbol.isConcatSpreadable]=false;
false
[4, 5, 6].concat(a);
(4) [4, 5, 6, Array(3)]
看起来您正在更改数组的值实际上,
a
。。。然而,Symbol.isConcatSpreadable
未被更改。它的数据类型很可能是布尔型的,因为的命名约定是
,如果您在代码中这样做的话,布尔型可以是数组的索引。当然,您不能设置Symbol对象的“isConcatSpreadable”属性。但是,数组实例不包含Symbol.isConcatSpreadable
的属性描述符,因此可以使用该键创建属性Object.getOwnPropertyDescriptor([],Symbol.isConcatSpreadable)//未定义的原因:您为什么要更改它?@jonaswillms我正在处理chromium v8重新定义错误,这里是poc:``函数gcc(){var l=[];for(var I=0;I<0x1c000;I++){l.push(new Set();}var arr=Array(2);gc();gc();arr.concat({get[Symbol.isConcatSpreadable](){arr.shift();gcc();}}});`这是一个重新定义错误,攻击者可以重新定义isConcatSpreadable符号,并导致一些安全问题。我很好奇为什么不应该重新定义它。poc应该显示什么?看起来你正在更改数组的值实际上,你的a
。。。然而,Symbol.isConcatSpreadable
未被更改。它的数据类型很可能是布尔型的,因为的命名约定是
,如果您在代码中这样做的话,布尔型可以是数组的索引。当然,您不能设置Symbol对象的“isConcatSpreadable”属性。但是,数组实例不包含Symbol.isConcatSpreadable
的属性描述符,因此可以使用该键创建属性Object.getOwnPropertyDescriptor([],Symbol.isConcatSpreadable)//未定义的原因:您为什么要更改它?@jonaswillms我正在处理chromium v8重新定义错误,这里是poc:``函数gcc(){var l=[];for(var I=0;I<0x1c000;I++){l.push(new Set();}var arr=Array(2);gc();gc();arr.concat({get[Symbol.isConcatSpreadable](){arr.shift();gcc();}}});`这是一个重新定义错误,攻击者可以重新定义isConcatSpreadable符号,并导致一些安全问题。我很好奇为什么它不应该被重新定义。那个poc应该显示什么?