当前位置: 首页 > news >正文

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 属性。

相关文章:

web:js原型污染简单解释

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

【C++打怪之路Lv7】-- 模板初阶

🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…...

实战OpenCV之模板匹配

基础入门 模板匹配是计算机视觉中一种常用的图像处理技术,用于在较大的目标图像中寻找与给定模板图像相似的子区域。这项技术的基本思想是在主图像中寻找与模板图像最相似的子区域,广泛应用于目标检测、图像识别等领域。模板匹配的主要流程包括如下三点。 1、滑动窗口。将模板…...

【C++ 11】for 基于范围的循环

文章目录 【 1. 基本用法 】【 2. for 新格式的应用 】2.1 for 遍历字符串2.2 for 遍历列表2.3 for 遍历的同时修改元素 问题背景 C 11标准之前(C 98/03 标准),如果要用 for 循环语句遍历一个数组或者容器,只能套用如下结构&#…...

创建索引时需要考虑的关键问题详解

引言 在数据库中,索引是加快数据查询速度的重要工具。通过索引,数据库可以快速定位需要的数据,而无需扫描整个表的数据。尽管索引能极大提高查询效率,但不合理的索引设计也可能导致性能下降,甚至增加不必要的系统开销…...

【JavaEE】【多线程】Thread类讲解

目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用…...

硬件面试(一)

网上别人的硬件面试记录,察漏补缺: 1.骄傲容易被打脸! 励磁电感和谐振电感的比值K大小有什么含义: 励磁电感和谐振电感的比值 KKK 通常用来衡量电路的特性。当 KKK 较大时,表示励磁电感相对于谐振电感较强,可能导致…...

9-贪心算法

PDF文档下载:LeetCode-贪心算法-java 参考:代码随想录 题目分类大纲如下: 贪心算法理论基础 什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心&#xff…...

前端编程艺术(3)---JavaScript

目录 1.JavaScript 1.输出 2.变量和数据类型 3.运算符 4.数组 5.函数 6.面向对象 7.ES6面向对象 2.BOM 1.document对象 3.DOM 4.JSON 1.JavaScript JavaScript是一种脚本编程语言,通常用于为网页增加交互性和动态效果。它是一种高级语言&#xff…...

动态规划算法题目练习——91.解码方法

1.题目解析 题目来源:91.解码方法——力扣 测试用例 2.算法原理 基础版本 1.状态表示 由于题目只要求返回第i个位置的可能情况,则只需要开辟n(ns.size())个大小的dp表即可 2.状态转移方程 题目可知第i个位置可以单独解码也可以与前一个位置组合解码&am…...

每天一个数据分析题(四百九十二)- 主成分分析与因子分析

在因子分析中,因子载荷矩阵是用来表示( )。 A. 变量和因子之间的关系 B. 样本和因子之间的关系 C. 变量和样本之间的关系 D. 因子和因子之间的关系 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案…...

Linux shell编程学习笔记86:sensors命令——硬件体温计

0 引言 同事们使用的Windows系统电脑,经常莫名其妙地装上了鲁大师,鲁大师的一项功能是显示系统cpu等硬件的温度。 在Linux系统中,sensors命令可以提供类似的功能。 1 sensors命令 的安装和配置 1.1 sensors命令 的安装 要使用sensors命…...

基于SSM车位租赁系统【附源码】

基于SSM车位租赁系统 效果如下: 注册页面 首页展示 车位租赁订单展示 车位列表页面 公告信息管理页面 公告类型管理界面 研究背景 随着经济的持续增长和城市化进程的加速,土地资源变得日益紧缺,停车难问题已成为许多城市面临的共同挑战。随…...

JAVA开源项目 新生报到网站 计算机毕业设计

本文项目编号 T 002 ,文末自助获取源码 \color{red}{T002,文末自助获取源码} T002,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 提…...

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …...

修改银河麒麟操作系统V10(SP1)网卡名称为ethx

修改银河麒麟桌面操作系统V10&#xff08;SP1&#xff09;网卡名称为ethx 步骤一&#xff1a;查看当前网卡信息步骤二&#xff1a;修改GRUB配置文件步骤三&#xff1a;更新GRUB配置步骤四&#xff1a;编辑网络接口文件步骤五&#xff1a;重启机器 &#x1f496;The Begin&#…...

MySQL多表查询:标量子查询

先看我的emp表结构 emp表 子查询基本语法 select * from t1 where column1 (select column1 from t2);例子1&#xff1a;查询"销售部" 的所有员工信息 这个可以先拆解为两个 a.查询"销售部"的部门ID select id from dept where name 销售部; b. 根…...

C++学习笔记----8、掌握类与对象(六)---- 操作符重载(1)

经常在对象上执行如相加&#xff0c;比较&#xff0c;文件传输等操作。例如&#xff0c;spreadsheet只有在可以在上面执行自述运算才有用&#xff0c;比如对整行的单元格求和。所有这些都可以通过重载操作符来完成。 许多人发现操作符重载的语法复杂而令人迷惑。至少一开始是这…...

Ascend C 自定义算子开发:高效的算子实现

Ascend C 自定义算子开发&#xff1a;高效的算子实现 在 Ascend C 平台上&#xff0c;开发自定义算子能够充分发挥硬件的性能优势&#xff0c;帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例&#xff0c;介绍 Ascend C 中自定义算子的开发流程及关键技术…...

面向对象技术——设计模式

目录 层次结构 具体设计模式分类 创建型模式&#xff08;处理创建对象&#xff09; 结构型模式&#xff08;处理类和对象的组合&#xff09; 行为型模式&#xff08;描述类或者对象的交互行为&#xff09; 创建型设计模式 ​编辑 结构型设计模式 行为型设计模式​编辑 …...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...