闭包漏洞
💡
突破点:原型
不直接修改 o, 修改 obj 对象,这是一个 IFEE 的闭包函数,一般使用闭包都是为了不暴露内部的变量。但是要注意一些特殊的漏洞处理.
const o = (function () {
const obj ={
a: 1,
b: 2,
};
// 漏洞修复 01: // Object.setPrototypeOf(obj, null);
return {
get: function (a) {
// 漏洞修复 02: if (!obj.hasOwnProperty(a)) return undefined;
return obj[a];
},
};
})();
Object.defineProperty(Object.prototype, 'abc', {
// getter
get() {
return this;
},
});
// get this
const a = o.get('abc');
// 侵入:修改 b
a.b = 22;
console.log(o.get('b'));