Skip to content

JS原型链污染

原型链污染

原型链污染(Prototype Pollution)是一种web应用程序中常见的安全漏洞,主要影响使用JavaScript的应用程序。它是一种攻击技术,通过修改JavaScript对象的原型链,来实现对应用程序的非法操作和控制。

JavaScript中的对象是通过原型链进行继承的。

每个对象都有一个指向其原型的链接,它允许对象从其原型中继承属性和方法。当JavaScript代码在处理输入时,如果不适当地允许用户控制原型链上的属性,攻击者就可以操纵原型链,并在目标对象上添加、修改或删除属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 创建一个构造函数
function Person(name) {
this.name = name;
}

// 给构造函数的 prototype 添加一个方法
Person.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};

// 创建一个实例
const john = new Person('John');

// 使用 __proto__ 访问原型对象
console.log(john.__proto__ === Person.prototype); // true

// 使用 constructor 访问构造函数
console.log(john.constructor === Person); // true

// 使用 Object.getPrototypeOf() 访问原型对象
console.log(Object.getPrototypeOf(john) === Person.prototype); // true

// 使用原型链调用方法
john.sayHello(); // 输出: "Hello, I am John"

About this Post

This post is written by Linly, licensed under CC BY-NC 4.0.