定义
在javascript中,如果攻击者通过某种手段修改 JavaScript 对象的原型(prototype),那么将可以影响所有和这个对象来自同一个类、父祖类的对象。这种攻击方式就是原型污染。
例子1
let al = ['a', 'b']; //定义一个数组
console.log(al); //输出
al.__proto__.toString = () => {alert('hello 5wimming')}; //通过原型污染数组的tostring方法
let bl = []; //定义一个新的数组
console.log(bl.toString()); //触发被污染的tostring方法,导致弹窗
例子2
let ad = {name: "hello bbq"};
console.log(ad.name)
// 修改字典的原型
ad.__proto__.name = 'hello 5wimming'
// 由于原型链顺序查找,ad.name 仍然是hello bbq
console.log(ad.name)
let bd = {}
console.log(bd.name)