原型链污染是一种安全漏洞,通过修改JavaScript对象的原型链,可以修改对象的行为或者访问未授权的属性和方法,利用它来执行恶意代码或者获取未授权的访问权限:
javascript
// 创建一个被污染的对象
var aa = {}
// 创建一个用于污染原型链的恶意对象
var bb = {
pollute: function() {
// 修改Object原型上的属性,影响到所有对象
Object.prototype.polluted = true
}
}
// 污染原型链
aa.__proto__ = bb;
// 调用恶意对象的方法,污染原型链
aa.pollute()
console.log({}.polluted)
首先创建一个空对象 aa,然后创建了另一个对象 bb,并将其设置为 aa 对象的原型。然后,我们调用 aa.pollute() 方法,该方法修改了 Object 原型上的属性 polluted,从而影响到所有JavaScript对象