web:js原型污染简单解释

1. 什么是对象?

在 JavaScript 中,对象是一种包含属性和方法的数据结构。你可以把对象想象成一个存储键值对的容器。每个键(key)都有一个对应的值(value),这个值可以是数据或者函数。

let person = {name: "Alice",age: 25,greet: function() {console.log("Hello, my name is " + this.name);}
};// 访问对象的属性和方法
console.log(person.name);  // 输出: Alice
console.log(person.age);   // 输出: 25
person.greet();            // 输出: Hello, my name is Alice

2. 什么是原型?

在 JavaScript 中,每个对象都有一个原型(prototype)。原型是另一个对象,所有的对象可以通过原型继承属性和方法。比如,JavaScript 中的所有对象默认继承自 Object.prototype,而 Object.prototype 本身也是一个对象。

示例:继承自 Object.prototype 的方法
let obj = {};
console.log(obj.toString());  // 输出: [object Object]

在这个例子中,obj 是一个空对象。虽然我们没有定义任何属性或方法,但它仍然能使用 toString() 方法,因为它继承自 Object.prototype,其中定义了 toString()

3. 原型链

当你访问对象的属性时,JavaScript 会首先在对象本身查找。如果没找到,它会去该对象的原型中寻找。这种逐层查找的机制被称为原型链

示例:通过原型链查找属性
let animal = {species: "Dog"
};let pet = Object.create(animal);  // pet 继承自 animal
pet.name = "Buddy";console.log(pet.name);    // 输出: Buddy (在 pet 对象本身找到)
console.log(pet.species); // 输出: Dog (在 pet 的原型 animal 中找到)

在这里,pet 继承自 animal,当访问 pet.species 时,JavaScript 没有在 pet 本身找到 species 属性,于是转而去它的原型 animal 中查找,成功找到。

4. 对象原型污染的例子

原型污染的代码示例:
let innocentObject = {};// 模拟用户输入的对象,其中有 __proto__ 属性
let userInput = {__proto__: {hacked: "Yes, I am hacked!"}
};// 合并用户输入到 innocentObject 中
Object.assign(innocentObject, userInput);console.log(innocentObject.hacked);  // 输出: undefined
console.log({}.hacked);              // 输出: "Yes, I am hacked!"
解释:
  1. 在代码中,userInput 包含 __proto__ 属性,这个属性指向一个包含 hacked 属性的对象。
  2. 使用 Object.assign() 方法将 userInput 合并到 innocentObject 中。
  3. 虽然 innocentObject 本身没有 hacked 属性,但是由于 __proto__ 被修改,JavaScript 的原型链被污染,Object.prototype 上被注入了一个 hacked 属性。
  4. 结果是:所有对象(包括空对象 {})都能访问到这个被注入的 hacked 属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能听诊器:宠物健康教育的创新工具

智能听诊器通过其配套的应用程序,为宠物主人提供了丰富的教育资源,帮助他们更好地理解宠物的生理信号和健康管理知识。这些教育模块通常包括宠物生理指标的解释、常见疾病的识别以及如何进行日常的宠物护理。 智能听诊器通过提供这些教育资源&#xff0…

爱心曲线公式大全

local r a*((math.sin(angle) * math.sqrt(math.abs(math.cos(angle)))) / (math.sin(angle) 1.4142) - 2 * math.sin(angle) 2) local x r * math.cos(angle) -- 计算对应的x值 local z r * math.sin(angle) 1.5*a - --曲线公式绘画 local function generateParabola()…

【论文笔记】Flamingo: a Visual Language Model for Few-Shot Learning

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Flamingo: a Visual Langu…

第十四章 Redis之全局唯一ID(分布式集群)

目录 一、概念 ‌二、全局唯一ID的生成方法‌ 三、Redis生成全局ID 3.1. 生成策略 3.2. 代码 一、概念 全局唯一ID是指在分布式系统中,每个实体都有一个唯一的标识符,确保在不同的节点或服务之间能够唯一标识一个实体。这种唯一性对于数据的一致性…

Vue项目开发注意事项

事项一:项目代码放在本地怎么运行起来 1、首先确定项目对应的node和npm版本 node下载地址 Index of /dist/https://nodejs.org/dist/ node 与 npm版本对应关系 Node.js — Node.js Releases 2、node卸载的时候,会自动把对应的npm卸载掉 情况1&…

2024-你自学网络安全的顺序可能一直是反的!

作为一名在网络安全领域工作了八年的技术人员,我想分享一些经验给2024年学习黑客技术的朋友们。 千万不要毫无基础就开始学黑客!一定要先了解相关的信息和知识! 对于刚入行的朋友,我建议先从网络安全或Web安全/渗透测试入手,这些方向市场需求…

【优选算法】(第二十八篇)

目录 K个⼀组翻转链表(hard) 题目解析 讲解算法原理 编写代码 两数之和(easy) 题目解析 讲解算法原理 编写代码 K个⼀组翻转链表(hard) 题目解析 1.题目链接:. - 力扣(Leet…

掌握RocketMQ——基本概念和系统架构

简述RcoketMQ 概念:RocketMQ是一个开源的分布式消息中间件,由阿里巴巴开发并贡献给Apache软件基金会。它用于处理高吞吐量、低延迟的消息传递,并广泛应用于现代分布式系统中。 1 基本概念 1.1 消息 (Message) 概念:消息是信息传…

【AI知识点】度量学习(Metric Learning)

简介 度量学习(Metric Learning)是一种机器学习方法,目标是通过学习一个距离度量函数,使得在特征空间中,相似的样本距离更近,不相似的样本距离更远。简单来说,它是在特征空间中定义一种适当的距…

Ubuntu24.04远程开机

近来在几台机器上鼓捣linux桌面,顺便研究一下远程唤醒主机。 本篇介绍Ubuntu系统的远程唤醒,Windows系统的唤醒可搜索相关资料。 依赖 有远程唤醒功能的路由器(当前一般都带这个功能)有线连接主机(无线连接有兴趣朋友…

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…

YOLO11改进|注意力机制篇|引入反向残差移动快iRMB

目录 一、【iRMB】注意力机制1.1【iRMB】注意力介绍1.2【iRMB】核心代码 二、添加【iRMB】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【iRMB】注意力机制 1.1【iRMB】注意力介绍 反向残差移动快iRMB结构如下所示&#xf…

【Canvas与标牌】盾形银底红带Best Quality Premium标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>BestQulityPremium金属牌重制版Draft2</title><style type&…

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求 内网部署safeline&#xff0c;通过frp让外网访问内部web网站服务&#xff0c;让safeline记录真实外网攻击IP safeline 跟 frp都部署在同一台服务器&#xff1a;192.168.2.103 frp client 配置 frpc只需要在https上添加transport.proxyProtocolVersion "v2"即…

旅游管理智能化转型:SpringBoot系统设计与实现

第四章 系统设计 4.1系统结构设计 对于本系统的开发设计&#xff0c;先自上向下&#xff0c;将一个完整的系统分解成许多个小系统来进行实现&#xff1b;再自下向上&#xff0c;将所有的“零件”组装成一个大的、完整的系统。因此这里面的许多个小功能块都要对将要实现的功能进…

用Python集成免费IP归属地查询API

IP查询的优势是什么&#xff1f; IP查询是一种强大的工具&#xff0c;能够快速提供关于IP地址的信息&#xff0c;如地理位置、互联网服务提供商&#xff08;ISP&#xff09;、连接类型等。这些数据在多种场景下都非常有用&#xff0c;帮助用户理解网络环境和用户行为。 首先&…

[哈希/二分]P1102 A-B 数对 - 洛谷

P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 题目来源 洛谷 题目内容 A-B 数对 题目背景 出题是一件痛苦的事情&#xff01; 相同的题目看多了也会有审美疲劳&#xff0c;于是我舍弃了大家所熟悉的 AB Problem&#xff0c;改用 A-B 了哈哈&#xff01; 题目描述 给…

Pikachu-Sql-Inject - 基于时间的盲注

基于时间的盲注&#xff1a; 就是前端的基于time 的盲注&#xff0c;什么错误信息都看不到&#xff0c;但是还可以通过特定的输入&#xff0c;判断后台的执行时间&#xff0c;从而确定注入。 mysql 里函数sleep() 是延时的意思&#xff0c;sleep(10)就是数据库延时10 秒返回内…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多&#xff0c;因此拆成2个章节&#xff0c;本章节是第二章节&…

唯有经久鱼水情 堪负重任

唯有经久鱼水情 堪负重任