首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Object.keys初始化构造函数中的值时,是否存在对象污染?

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

Stack Overflow用户
提问于 2020-05-11 08:20:53
回答 1查看 28关注 0票数 0

我有一个样例类,定义如下

代码语言:javascript
复制
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")
  }
}

因此,当我创建一个以上类的对象时-我可以访问下面的值

代码语言:javascript
复制
    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"

代码容易受到对象污染吗?

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

代码语言:javascript
复制
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"

对象污染可以在这个类上完成吗?如果是这样,请告诉我有哪些不同的污染方法。

这会对代码有影响吗?

代码语言:javascript
复制
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
  }
}
})

EN

回答 1

Stack Overflow用户

发布于 2020-05-11 09:06:06

简短的答案是YES。这是因为你没有在安全模式下检查你是"initializing"的密钥是否有效,因此,你可以向你的对象发送任何东西,使其易受攻击。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61720462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档