繁体   English   中英

使用 Object.keys 在构造函数中初始化值时是否存在 Object 污染?

[英]Is There a Object pollution while initializing values in a constructor using Object.keys?

我有一个示例 class 定义如下

 class Constants { constructor(keysObj) { this.keysObj = keysObj Object.keys(this.keysObj).forEach((k) => this[k] = keysObj[k]) } function getInformation() { console.log("This is default function") } }

因此,当我创建高于 class 的 object - 我可以访问以下值

 var newConsts = new Constants({ a: 1, b: 2, c: 3 }) // so I can access above values in this way console.log(newConsts.c) // outputs 3 console.log(newConsts.getInformation) // outputs "This is default function"

代码是否容易受到 Object 污染?

到目前为止我观察到的是 - 如果我像这样创建一个新的 object

 var newConsts1 = new Constants({ a: 1, b: 2, getInformation: function() { console.log('This is modifed') } }) // so I can access above values in this way console.log(newConsts1.b) // outputs 2 console.log(newConsts1.getInformation) // outputs "This is modifed"

Object 污染可以在这个 class 上完成吗? 如果是这样,请让我知道污染它的不同方法是什么。

这会对代码有任何影响吗

 var newConsts3 = new Constants({ a: 1, b: 2, __Proto__: { toString: function() { console.log('faulty toString Executed') } } }) var newConsts3 = new Constants({ a: 1, b: 2, prototype: { construtor: undefined } } })

简短的回答是YES的。 这是因为您没有在安全模式下检查您"initializing"的密钥是否正确,因此,您可以向 object 发送任何内容并使其易受攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM