原型链污染是指攻击者通过修改JavaScript对象的原型(prototype),从而影响了基于该原型创建的所有对象的行为。
在JavaScript中,每个对象都有一个指向其原型的内部链接,这个原型本身也可以有它自己的原型,形成了一条原型链。
当访问一个对象的属性时,如果该对象自身没有这个属性,JavaScript引擎会沿着原型链向上查找。
攻击者可能会利用这个机制,通过修改对象的原型来注入恶意属性或方法,进而在应用程序的其他部分执行恶意代码或改变预期行为。
这通常发生在攻击者能够控制或影响对象原型的情况下,比如通过用户输入或某些不安全的操作。
什么是原型链污染
例如之前讲的原型案例:
// 假设我们有一个名为 Alice 的对象,它有一个 greet 方法
let Alice = {
greet: function() {
console.log("Hello, I'm Alice.");
}
};
// Alice 调用 greet 方法,输出 "Hello, I'm Alice."
Alice.greet(); // 输出: Hello, I'm Alice.
// 接下来,攻击者试图通过修改 Alice 的原型来污染原型链
Alice.__proto__.evilGreet = function