网络安全--原型链污染

这篇具有很好参考价值的文章主要介绍了网络安全--原型链污染。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.什么是原型链污染

2.原型链三属性

1)prototype

2)constructor

3)__proto__

4)原型链三属性之间关系 

3.JavaScript原型链继承

1)分析

2)总结

3)运行结果 

 4.原型链污染简单实验

1)实验一

 2)实验2


1.什么是原型链污染

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

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

攻击者利用原型链污染可以实现多种攻击,包括但不限于:

  1. 修改对象的原型,从而覆盖或扩展原有属性和方法,导致应用程序的意外行为或漏洞。
  2. 污染全局对象的原型,导致全局范围内的异常行为,可能导致系统崩溃或敏感信息泄露。
  3. 在原型链上添加恶意方法或属性,用于劫持或篡改应用程序的逻辑。
  4. 绕过应用程序的安全控制,获取未授权的访问权限。

原型链污染漏洞通常是由于开发者未正确验证和过滤用户提供的输入数据所导致的。为了防止原型链污染,开发者应该始终对用户输入进行严格的验证和过滤,并避免直接使用用户提供的数据来操作原型链上的属性。另外,更新JavaScript运行时环境和库到最新版本也可以帮助防范已知的原型链污染漏洞。

在一个应用中,如果攻击者控制并修改了一个对象的原型,那么将可以影响所有和这个对象来自同一个类、父祖类的对象。这种攻击方式就是原型链污染。

2.原型链三属性

1)prototype

prototype 是函数对象特有的属性。在 JavaScript 中,每个函数都有一个 prototype 属性,它是一个指向对象的引用。这个对象被称为该函数的原型对象,它包含了可以由该函数的所有实例共享的属性和方法。当通过构造函数创建对象实例时,实例的 __proto__ 属性会指向构造函数的 prototype 对象。

2)constructor

constructor 属性是原型对象的一个属性,它指向构造函数本身。当你创建一个函数并给它设置 prototype 属性后,prototype 对象会自动获得一个名为 constructor 的属性,该属性指向该函数本身。这样,通过实例对象的 constructor 属性,你可以访问到创建该实例的构造函数。

3)__proto__

__proto__ 是每个对象都有的属性,它指向对象的原型。在 JavaScript 中,对象通过 __proto__ 属性链接到它们的原型对象,从而形成了原型链。当你访问一个对象的属性时,如果该对象本身没有该属性,JavaScript 就会沿着原型链往上查找,直到找到该属性或者到达原型链的顶端(通常是 Object.prototype)。

4)原型链三属性之间关系 

// 创建一个构造函数
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"

3.JavaScript原型链继承

function Father() {
    this.first_name = 'Donald'
    this.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}`)

1)分析

Son类继承了Father类的last_name属性,最后输出的是Name: Melania Trump

2)总结

  1. 在对象son中寻找last_name

  2. 如果找不到,则在son.__proto__中寻找last_name

  3. 如果仍然找不到,则继续在son.__proto__.__proto__中寻找last_name

  4. 依次寻找,直到找到null结束。比如,Object.prototype__proto__就是null

3)运行结果 

网络安全--原型链污染,web安全,安全

 4.原型链污染简单实验

1)实验一

let foo = {bar :1}
console.info(foo.bar)
//foo是一个object foo.__proto__ === object.prototype
foo.__proto__.bar = 2
console.info(foo.bar)
let zoo = {}
console.info(zoo.bar)

 污染过程

因为前面我们修改了foo的原型foo.__proto__.bar = 2,而foo是一个Object类的实例,所以实际上是修改了Object这个类,给这个类增加了一个属性bar,值为2。

后来,我们又用Object类创建了一个zoo对象let zoo = {},zoo对象自然也有一个bar属性

 2)实验2

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]
        }
    }
}

var x = {
    age:11
}

var y = {
    age: 12,
    num: 100
}
merge(x,y)
console.info(x)
console.info(y)

运行结果:

网络安全--原型链污染,web安全,安全

为什么会被污染?

merge函数的目的是将source对象中的属性合并到target对象中。如果source对象和target对象具有相同的键(属性名),那么merge函数将递归地将嵌套对象的属性合并。否则,如果source对象具有target对象中不存在的键,merge函数将直接将该键值对添加到target对象中,接下来,执行 merge(x, y) 语句将会将 y 对象的属性合并到 x 对象中文章来源地址https://www.toymoban.com/news/detail-623275.html

到了这里,关于网络安全--原型链污染的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【安全】原型链污染 - Code-Breaking 2018 Thejs

    目录 准备工作 环境搭建 加载项目 复现  代码审计 payload  总结         Nodejs         BurpSuite          项目链接 ① 下载好了cmd切进去   ② 安装这个项目   可以检查一下 ③运行并监听           可以看到已经在3000端口启动了    看到了这一句,所以要先了解l

    2024年02月11日
    浏览(29)
  • 网络安全实验——web安全

    目录 实验目的 实验原理 实验内容 实验1 1. 地址栏中执行脚本 2. 对DOM技术的利用 实验2  1.jump1 2.jump2 3.get 4.xss 5.注册bss 6.盗取cookie 7.分析cookie  实验3 一.搭建IIS服务器 二.身份验证和权限设置 三.IP地址和域名限制 四.安全通信 五. 单点登录  实验总结 1. 了解什么是XSS 2. 掌握盗

    2024年02月13日
    浏览(35)
  • 网络安全-Web端安全协议

    大家上网娱乐或办公总是离不开浏览器,也就是从web端访问各个网站,其安全的重要性与其使用的广泛性成正比。本文就web端常见的相关安全协议分享。 SSL(Secure Sockets Layer),安全套接层,它是在传输通信协议(TCP/IP)上实现的一种安全协议,它位于应用层协议之下且独立的

    2024年02月08日
    浏览(34)
  • 网络安全-安全Web网关(SWG)详解

    在当今快速发展的网络环境中,企业面临着越来越多的网络安全挑战。安全Web网关(SWG)作为一种高效的网络安全解决方案,为企业提供了一个安全、可控的网络使用环境。 安全Web网关是一种网络安全设备或服务,主要功能是监控和管理用户的Web访问,以防止恶意软件入侵和

    2024年02月01日
    浏览(40)
  • Web 学习笔记 - 网络安全

    目录 m前言 正文 XSS 攻击 简单示例 XSS 防御 CSRF  Web 安全方面的基本知识是有很必要的,未必就要深入理解。本文主要介绍常见的网络攻击类型,不作深入探讨。 网络攻击的形式种类繁多,从简单的网站敏感文件扫描、弱口令暴力破解,到 SQL 注入,再到复杂的网络劫持等,

    2023年04月24日
    浏览(36)
  • 网络安全——Web目录扫描

    一、Web目录扫描原因 1、发现网站后台管理登录页面,可以尝试发现漏洞,进行爆破 2、寻找未授权页面,有些网站在开发时有一些没有授权的页面,在上线后没有及时清除,可以利用这个弱点进行入侵 3、寻找网站更多隐藏信息 二、Web目录扫描方法 1、robots.txt  例:可以看到

    2024年02月05日
    浏览(36)
  • 安全开发-JS应用&NodeJS指南&原型链污染&Express框架&功能实现&审计&WebPack打包器&第三方库JQuery&安装使用&安全检测

    Node.js是运行在服务端的JavaScript 文档参考:https://www.w3cschool.cn/nodejs/ Nodejs安装:https://nodejs.org/en 三方库安装 express:Express是一个简洁而灵活的node.js Web应用框架 body-parser:node.js中间件,用于处理 JSON, Raw, Text和URL编码的数据。 cookie-parser:这就是一个解析Cookie的工具。通过re

    2024年02月11日
    浏览(48)
  • 【web网络安全基础阶段一】

    在学习web网络安全,需要了解web安全前端基础,我将会从HTML,CSS,JavaScript前端技术,以及HTTP协议运作原理进行阐述。 前端技术作用 前端开发是创建Web页面或App等前端界面呈现给用户的过程。 • HTML,CSS及JavaScript • 网页制作是Web1.0时代的产物,早期网站主要内容都是静态

    2024年04月25日
    浏览(31)
  • 网络安全CTF之Web基础

    Web类的考试,在CTF比赛中十分常见。 本人从计算机专业转网络安全发展,属于半路出家,一知半解,如有总结不到位的地方,欢迎交流分享。 攻防世界Web Web基础中,常见的考点如下: 1、源代码隐藏 打开网页,显示 FLAG is not here。 F12查看源代码,取得flag 2、GET和POST传参 G

    2024年02月07日
    浏览(36)
  • 浅谈网络爬虫与Web安全

           网络爬虫(Web Crawler) ,又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则自动抓取万维网资源的程序或者脚本,已被广泛应用于互联网领域。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,通过相应的索引技术组织这些信息

    2024年03月10日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包