Skip to content

学习周报-2025-06-29

无法直接获取对象的情况下,修改对象属性

闭包代码的提权漏洞【渡一教育】

在闭包中,无法直接获取对象的属性,但是可以通过修改对象的属性来实现。

已有代码:

js
const o = (function () {
  const obj = {
    a: 1,
    b: 2,
  }
  return {
    get: function (key) {
      return obj[key];
    },
  }
})()

当前通过变量o的封装,无法直接获取obj并修改obj的属性。

但是可以通过在Object.prototype上添加一个自定义属性,然后这个属性直接返回obj本身,这样就可以随意修改obj了:

js
Object.defineProperty(Object.prototype, 'hack', {
  get: function () {
    return this
  }
})

const obj = o.get('hack');
obj.a = 3;
console.log(obj.a); // 3