基础原型链污染

<aside> 💡

引用类型皆为对象

</aside>

原型和原型链都是来源于对象而服务于对象的概念,所以我们要先明确一点:

JavaScript中一切引用类型都是对象,对象就是属性的集合。

Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。

也就是说 数组是对象、函数是对象、正则是对象、对象还是对象。

<aside> 💡

构造函数的原型对象和对象原型的关系

</aside>

复制代码
//**构造函数的prototype===对象的__proto__
//Son.prototype===son.__proto__**

function Son(){};
var son = new Son();
console.log(Son.prototype)//Son {}
console.log(son.__proto__)//Son {}
console.log(Son.prototype===son.__proto__)//true

**//Son.prototype===son.__proto__**  

<aside> 💡

原型链污染的原因函数(对象合并)

</aside>

copy类复制函数,引起原型链污染

复制代码
**function merge(target,source){
   for (let key in source){
       if (key in source && key in target){
         merge(target[key], source[key])
       }else {
          target[key]= source[key]
       }   
    }
}

1.  //key是键!!!
2.  //里面是个子递归,进行完全复制**

<aside> 💡

JSON.parse传参成功原型链污染

</aside>

__proto__被直接当做02的原型父类,不是键,不会复制!!!

复制代码
function merge(target,source){
   for (let key in source){
       if (key in source && key in target){
         merge(target[key], source[key])
       }else {
          target[key]= source[key]
       }   
    }
}
let o1 ={}
let o2 = {a: 1, "__proto__": {b: 2}}
merge(o1,o2)
console.log(o1.a, o1.b)//1 2
o3 ={}
console.log(o3.b)//undefined

JSON.parse传参成功原型链污染

复制代码
function merge(target,source){
   for (let key in source){
       if (key in source && key in target){
         merge(target[key], source[key])
       }else {
          target[key]= source[key]
       }   
    }
}
let o1 ={}
let o2 = JSON.parse('{"a": 1, "__proto__": {"b": 2}}')
merge(o1,o2)
console.log(o1.a, o1.b)//1 2
o3 ={}
console.log(o3.b)//2

<aside> 💡

constructor构造函数原型链污染

</aside>

constructor构造函数原型链污染!!!

复制代码
**{
    "id": 1,
    "constructor": {
        "prototype": {
            "isAdmin": true
        }
    }
}**
相关推荐
菩提小狗5 小时前
小迪安全2023-2024|第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载_笔记|web安全|渗透测试|
笔记·安全·web安全
码农阿豪5 小时前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
岁岁种桃花儿5 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
csbysj20205 小时前
AngularJS 模块
开发语言
独好紫罗兰6 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n6 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
不会代码的小测试6 小时前
UI自动化-POM封装
开发语言·python·selenium·自动化
roman_日积跬步-终至千里6 小时前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
lsx2024066 小时前
C++ 基本的输入输出
开发语言
CodeSheep程序羊6 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展