[英]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.