我有一个样例类,定义如下
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")
}
}
因此,当我创建一个以上类的对象时-我可以访问下面的值
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"
代码容易受到对象污染吗?
到目前为止,我观察到的是-如果我创建一个像这样的新对象
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"
对象污染可以在这个类上完成吗?如果是这样,请告诉我有哪些不同的污染方法。
这会对代码有影响吗?
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
}
}
})
发布于 2020-05-11 09:06:06
简短的答案是YES。这是因为你没有在安全模式下检查你是"initializing"的密钥是否有效,因此,你可以向你的对象发送任何东西,使其易受攻击。
https://stackoverflow.com/questions/61720462
复制相似问题