网站建设公司南宁wordpress更换IP

news/2025/9/23 22:58:02/文章来源:
网站建设公司南宁,wordpress更换IP,网络架构模拟器,filp pdf wordpress原型链污染攻击 prototype 和 _proto_是什么 JavaScript中的类的简历 在JavaScript中#xff0c;我们如果要定义一个类#xff0c;需要以定义“构造函数”的方式来定义#xff1a; function Foo() {this.bar 1 }new Foo() 解析#xff1a; Foo函数的内容#xff0c;就…原型链污染攻击 prototype 和 _proto_是什么 JavaScript中的类的简历 在JavaScript中我们如果要定义一个类需要以定义“构造函数”的方式来定义 function Foo() {this.bar 1 }new Foo() 解析         Foo函数的内容就是Foo类的构造函数而this.bar就表示Foo类中的一个属性 为了简化编写JavaScript代码ECMAScript 6后增加了class语法但class其实只是一个语法糖 JavaScript中的类中方法的建立 一个类必然有一些方法类似属性this.bar我们也可以将方法定义在构造函数内部 function Foo() {this.bar 1this.show function() {console.log(this.bar)} }(new Foo()).show() 解析         这样写有一个问题就是每当我们新建一个Foo对象时this.show function()... 就会执行一次这个show方法实际上是绑定在对象上的而不是绑定在“类”中 JavaScript中原型prototype的引用 希望在创建类时只创建一次show方法需要使用原型prototype function Foo() {this.bar 1 }Foo.prototype.show function show() {console.log(this.bar) }let foo new Foo() foo.show() 解析         我们可以认为原型prototype是类Foo的一个属性而所有用Foo类实例化的对象都将有这个属性中的所有内容包括变量和方法。foo对象天生具有foo.show()方法         此时Foo.prototype来访问Foo类的原型但是Foo实例化出来的对象是不能够通过prototype访问原型 JavaScript中__proto__的引用 一个Foo类实例化出来的foo对象可以通过foo.__proto__属性来访问Foo中类的原型 foo.__proto__ Foo.prototype prototype 和 _proto_的定义 prototype --- 是一个类的属性所有类对象在实例化的时候将会拥有prototype中的属性和方法 一个对象的__proto__属性指向这个对象所在类的prototype属性 JavaScript中原型链继承 所有类对象在实例化的时候将会拥有中的prototype属性和方法这个特性被用来实现JavaScript中的继承机制 function Father() {this.first_name Donaldthis.last_name Trump }function Son() {this.first_name Melania }Son.prototype new Father()let son new Son() console.log(Name: ${son.first_name} ${son.last_name}) 解析         Son类继承了Father类的last_name属性最后输出的是Name: Melania Trump JavaScript引擎会进行如下操作: 在对象son中寻找last_name 如果找不到则在son.__proto__中寻找last_name 如果仍然找不到则继续在son.__proto__.__proto__中寻找last_name 依次寻找直到找到null结束。比如Object.prototype的__proto__就是null JavaScript的这个查找的机制被运用在面向对象的继承中被称作prototype继承链 注意 每个构造函数(constructor)都有一个原型对象(prototype) 对象的__proto__属性指向类的原型对象prototype JavaScript使用prototype链实现继承机制 原型链污染是什么 引入 在前面说过 foo.__proto__指向的是Foo类的prototype。那么如果我们修改了foo.__proto__中的值是不是就可以修改Foo类呢 // foo是一个简单的JavaScript对象 let foo {bar: 1}// foo.bar 此时为1 console.log(foo.bar)// 修改foo的原型即Object foo.__proto__.bar 2// 由于查找顺序的原因foo.bar仍然是1 console.log(foo.bar)// 此时再用Object创建一个空的zoo对象 let zoo {}// 查看zoo.bar console.log(zoo.bar) 解析         因为前面我们修改了foo的原型foo.__proto__.bar 2而foo是一个Object类的实例所以实际上是修改了Object这个类给这个类增加了一个属性bar值为2         后来我们又用Object类创建了一个zoo对象let zoo {}zoo对象自然也有一个bar属性了 原型链污染定义 在一个应用中如果攻击者控制并修改了一个对象的原型那么将可以影响所有和这个对象来自同一个类、父祖类的对象。这种攻击方式就是原型链污染 哪些情况原型链会被污染 我们思考一下哪些情况下我们可以设置__proto__的值呢其实找找能够控制数组对象的“键名”的操作即可 对象merge 结合 拼接 对象clone其实内核就是将待操作的对象merge到一个空对象中 复制 使用merge测试 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]}} } 在合并的过程中存在赋值的操作target[key] source[key]那么这个key如果是__proto__是不是就可以原型链污染呢 使用如下代码进行测试 let o1 {} let o2 {a: 1, __proto__: {b: 2}} merge(o1, o2) console.log(o1.a, o1.b)o3 {}console.log(o3.b) 结果是合并虽然成功了但原型链没有被污染 解析         这是因为我们用JavaScript创建o2的过程let o2 {a: 1, __proto__: {b: 2}}中__proto__已经代表o2的原型了此时遍历o2的所有键名你拿到的是[a, b]__proto__并不是一个key自然也不会修改Object的原型 修改代码 let o1 {} let o2 JSON.parse({a: 1, __proto__: {b: 2}}) merge(o1, o2) console.log(o1.a, o1.b)o3 {}console.log(o3.b) 解析         这是因为JSON解析的情况下__proto__会被认为是一个真正的“键名”而不代表“原型”所以在遍历o2的时候会存在这个键 案例 案例一 const express require(express) var hbs require(hbs); var bodyParser require(body-parser); const md5 require(md5); var morganBody require(morgan-body); const app express(); //目前user并没有admintoken var user []; //empty for nowvar matrix []; for (var i 0; i 3; i){matrix[i] [null , null, null]; }function draw(mat) {var count 0;for (var i 0; i 3; i){for (var j 0; j 3; j){if (matrix[i][j] ! null){count 1;}}}return count 9; }app.use(express.static(public)); app.use(bodyParser.json()); app.set(view engine, html); morganBody(app); app.engine(html, require(hbs).__express);app.get(/, (req, res) {for (var i 0; i 3; i){matrix[i] [null , null, null];}res.render(index); })app.get(/admin, (req, res) { /*this is under development I guess ??*/console.log(user.admintoken);if(user.admintoken req.query.querytoken md5(user.admintoken) req.query.querytoken){res.send(Hey admin your flag is bflag{prototype_pollution_is_very_dangerous}/b);} else {res.status(403).send(Forbidden);} } )app.post(/api, (req, res) {var client req.body;var winner null;if (client.row 3 || client.col 3){client.row % 3;client.col % 3;}matrix[client.row][client.col] client.data;for(var i 0; i 3; i){if (matrix[i][0] matrix[i][1] matrix[i][1] matrix[i][2] ){if (matrix[i][0] X) {winner 1;}else if(matrix[i][0] O) {winner 2;}}if (matrix[0][i] matrix[1][i] matrix[1][i] matrix[2][i]){if (matrix[0][i] X) {winner 1;}else if(matrix[0][i] O) {winner 2;}}}if (matrix[0][0] matrix[1][1] matrix[1][1] matrix[2][2] matrix[0][0] X){winner 1;}if (matrix[0][0] matrix[1][1] matrix[1][1] matrix[2][2] matrix[0][0] O){winner 2;} if (matrix[0][2] matrix[1][1] matrix[1][1] matrix[2][0] matrix[2][0] X){winner 1;}if (matrix[0][2] matrix[1][1] matrix[1][1] matrix[2][0] matrix[2][0] O){winner 2;}if (draw(matrix) winner null){res.send(JSON.stringify({winner: 0}))}else if (winner ! null) {res.send(JSON.stringify({winner: winner}))}else {res.send(JSON.stringify({winner: -1}))}}) app.listen(3000, () {console.log(app listening on port 3000!) }) 解析         获取flag的条件是 传入的querytoken要和user数组本身的admintoken的MD5值相等且二者都要存在 由代码可知全文没有对user.admintokn 进行赋值所以理论上这个值是不存在的但因为存在一下赋值语句 matrix[client.row][client.col] client.data; 其中data,row,col都是我们post传入的值都是可控的。所以可以构造原型链污染 本地测试

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

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

相关文章

wordpress提示不安全浙江杭州seo网站建设网站优化

优质博文IT-BLOG-CN 一、题目 已知一个长度为n的数组,预先按照升序排列,经由1到n次 旋转 后,得到输入数组。例如,原数组nums [0,1,2,4,5,6,7]在变化后可能得到: 【1】若旋转4次,则可以得到[4,5,6,7,0,1,2…

做网站用vs还是dw德阳企业品牌网站建设

一、AR模型(自回归) AR探索趋势和周期性 预测依赖于过去的观测值和模型中的参数。模型的阶数 p pp 决定了需要考虑多少个过去时间点的观测值。 求AR模型的阶数 p和参数 ϕ i \phi_i ϕi​ ,常常会使用统计方法如最小二乘法、信息准则(如AIC、BIC&#xf…

吉林网站优化信息门户登录入口

1、函数指针 函数指针是指向函数的指针变量。它可以用于存储函数的地址,允许在运行时动态选择要调用的函数。(是一个指针) //函数指针的形式 返回类型 (*指针变量名) 参数列表int add(int a,int b){return ab; }int subtract(int a,int b){…

金属质感 网站怎么拥有自己的网站

目录 一、INNER JOIN(内连接,等值连接) 二、LEFT JOIN(左连接) 三、RIGHT JOIN(右连接): 一、INNER JOIN(内连接,等值连接) 用途:获取两个表中字段能匹配上…

个人网站 程序百度后台推广登录

表情识别 | LBPSVM实现脸部动态特征的人脸表情识别程序(Matlab) 目录 表情识别 | LBPSVM实现脸部动态特征的人脸表情识别程序(Matlab)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1 运行环境 程序运行在Windows系统下&am…

翠屏区网站建设企业年金的好处和坏处

总体安装过程已经很明白了,写的人很多了,我就不赘述了,可以参考这里或者其他博客。我主要记录几个我遇到的问题以及解决方法。 1、cmake报错:No CMAKE_CUDA_COMPILER could be found. 这个原因是没找到cuda和nvcc目录&#xff0…

Gemini-2.5-Flash-Image-Preview 与 GPT-4o 图像生成能力技术差异解析​ - 教程

Gemini-2.5-Flash-Image-Preview 与 GPT-4o 图像生成能力技术差异解析​ - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

鸿蒙ArkTS Canvas实战:转盘抽奖程序开发教程(基础到进阶) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做服装的网站免实名域名购买

centos 7 重启服务器 内容精选换一换本节操作介绍Linux操作系统云服务器在单用户模式下重置密码的操作步骤。本文档适用于X86架构的弹性云服务器。进入单用户模式下重置root密码前请先做好数据备份。请根据操作系统类型选择操作步骤:CentOS 8系列CentOS 7/EulerOS 系…

潍坊网站建设公司慕枫山东监理工程师考试最新消息

TypeScript数组和对象的操作 一、数组的声明二、数组初始化三、数组元素赋值、添加、更改四、删除五、合并、断开数组六、查找数组元素位置七、连接数组元素八、排序、反序数组九、遍历请看这里 一、数组的声明 let arr1: Array<number>; let arr2: number[];二、数组初…

织梦菜谱网站模板免费下载wordpress无法用ftp

等额本息贷款和等额本金贷款的月供应该怎么算&#xff1f; 从一个例子开始&#xff0c;假设我要从银行贷款36万(即&#xff0c;本金)&#xff0c;银行给出的贷款年利率是12%(月利率为年利率除以12)&#xff0c;贷款半年(6个月)&#xff0c;按月还款&#xff0c;分6期还完。 问分…

资讯类网站开发文档济南制作网站

此系列文章收录在公众号中&#xff1a;数据大宇宙 > 数据处理 >E-pd转发本文并私信我"python"&#xff0c;即可获得Python资料以及更多系列文章(持续更新的)经常听别人说 Python 在数据领域有多厉害&#xff0c;结果学了很长时间&#xff0c;连数据处理都麻烦得…

天津公司建设网站公司网站建设的策划方案

IEEE Transactions on Affective Computing上的一篇文章&#xff0c;做微表情识别&#xff0c;阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响&#xff0c;及如何融合多个微表情数据集&#xff0c;从而提升模型的准确度。工作量非常饱满&#xff0c;很认真&…

网站动效怎么做的网络服务费分录

#MYSQL#这是我MySQL的第八篇教程。本篇主要介绍的是MySQL的组合查询的用法。在大多数的SQL查询中都只包含从一个或者多个表中返回数据的单条SELECT语句&#xff0c;MySQL其实也支持允许执行多条SELECT语句&#xff0c;并将结果作为单个结果集返回&#xff0c;这些组合查询通常称…

什么网站可以接单做高端网网站建设

复合类型 复合类型是一种由其他类型组成的类型。它可以是数组、结构体、联合体或指向这些类型的指针。复合类型允许将多个值组合成单个实体&#xff0c;以便更方便地处理和使用。复合类型在C语言中非常常见&#xff0c;用于表示复杂的数据结构和组织数据的方式。 数组是一种由…

做商城网站的项目背景图片wordpress中文支持

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

韩雪冬模板网站怎么注册一个网站做色流

一、Redis持久化的两种方法&#xff1a; RDB&#xff08;Redis DataBase Backup file&#xff09;Redis数据备份文件 与AOF&#xff08;Append Only File&#xff09;追加文件 二、RDB 1、介绍 RDB 简单来说就是将物理内存中的数据快照写入磁盘中,当Redis实例宕机时&…

dede一键更新网站wordpress插件去掉广告

3月21日&#xff0c;在巴黎举办的云原生顶级峰会KubeCon EU 2024上 &#xff0c;华为云首席架构师顾炯炯在“Cloud Native x AI&#xff1a;以持续开源创新开启智能时代”的主题演讲中指出&#xff0c;云原生和AI技术的融合&#xff0c;是推动产业深刻变革的关键所在。华为云将…

做网站 违法推广类电商文案

ssh: connect to host github.com port 22: Connection refused 问题现象 本文以Windows系统为例进行说明&#xff0c;在个人电脑上使用Git命令来操作GitHub上的项目&#xff0c;本来都很正常&#xff0c;突然某一天开始&#xff0c;会提示如下错误ssh: connect to host gith…

电商网站建设流程中文手机app开发软件

RGB空间中的彩色图像分割 ⭐️ 为尊重原创性&#xff01;转载请注明出处&#xff1a;©️ Sylvan Ding’s Blog 概述 本文论述了基于欧式距离和曼哈顿距离的彩色图像分割算法&#xff0c;并用python实现了各个算法。之后将二者的优势结合&#xff0c;提出了改进后的曼哈顿…