javascript - 使用 Object.keys 在构造函数中初始化值时是否存在对象污染?
问题描述
我有一个定义如下的示例类
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
}
}
})
解决方案
简短的回答是YES
。这是因为您没有在安全模式下检查您的密钥是否"initializing"
正确,因此,您可以向您的对象发送任何内容并使其易受攻击。
推荐阅读
- maven - maven 找不到工件 org.cytoscape:
- angular - Angular 5:错误类型错误:_this.pageProjects.indexOf 不是函数
- javascript - 何时使用 HOC。何时使用函数作为子级
- java - TOmcat 启动时出错:java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
- c - 您能在 ZeroMQ 中获取发布者和订阅者的身份/地址吗?
- c# - 附加到代码中的内容时,单元格重复图像
- amazon-web-services - Terraform 自定义属性破坏用户池 AWS
- yii2 - yii2,跳过查询中的空字段
- python - 如何设置 Google 凭据以从 Heroku 上的 Python 应用程序调用 Google API
- python - Python PyX 绘图:PDF 文件包含