JavaScript原型链污染漏洞复现与防范

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

目录

什么是原型链污染漏洞?

复现原型链污染漏洞

防范原型链污染漏洞


什么是原型链污染漏洞?

原型链污染是JavaScript中的一种安全漏洞,利用该漏洞可以修改对象的原型,从而影响对象及其属性的行为。攻击者可以通过修改原型链来添加或覆盖属性,甚至在全局范围内添加恶意代码,导致应用程序出现意外行为或安全问题。

复现原型链污染漏洞

简单的示例来复现原型链污染漏洞:

// 假设我们有一个配置对象
const config = {
  debug: false
};

// 用户提供的输入数据(来自不可信源)
const userInput = '{"__proto__": {"debug": true}}';

// 将用户输入转换成对象
const userConfig = JSON.parse(userInput);

// 合并用户配置和默认配置
const mergedConfig = Object.assign({}, config, userConfig);

// 输出配置
console.log(mergedConfig.debug); // 输出:true
console.log(config.debug); // 输出:true(原型链被污染)

在上面的例子中,我们有一个配置对象 config,用户提供的输入数据 userInput 来自不可信源。通过 JSON.parse 将用户输入转换为对象后,我们使用 Object.assign 合并用户配置和默认配置。然而,由于用户提供的输入中包含 __proto__ 属性,它修改了对象的原型,从而污染了原型链,导致 config 中的 debug 属性也被修改。

防范原型链污染漏洞

为了防范原型链污染漏洞,我们应该采取一些措施来确保用户输入的安全性:

  1. 输入验证:在接收用户输入之前,始终进行有效性验证,确保用户提供的数据符合预期的格式和内容。

  2. JSON.parse安全解析:如果需要解析JSON数据,请使用 JSON.parse 的第二个参数将属性名转换为字符串,避免原型链污染。

const userInput = '{"__proto__": {"debug": true}}';
const userConfig = JSON.parse(userInput, (key, value) => {
  if (key === '__proto__') {
    return null; // 或者抛出错误
  }
  return value;
});

使用Object.defineProperty:在设置对象的属性时,可以使用 Object.defineProperty 来定义只读或不可枚举的属性,防止原型链被污染。

const config = {
  debug: false
};

const userInput = '{"__proto__": {"debug": true}}';
const userConfig = JSON.parse(userInput);

// 合并用户配置和默认配置
const mergedConfig = Object.assign({}, config);
Object.keys(userConfig).forEach(key => {
  Object.defineProperty(mergedConfig, key, {
    value: userConfig[key],
    enumerable: false, // 阻止属性被枚举
    writable: false // 阻止属性被修改
  });
});

采取这些防范措施可以有效地避免原型链污染漏洞,保护应用程序的安全性和稳定性。当处理来自不可信源的用户输入时,始终要格外谨慎,确保对数据进行适当的处理和验证,以避免潜在的安全风险。文章来源地址https://www.toymoban.com/news/detail-635118.html

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

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

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

相关文章

  • JavaScript原型链污染

    在浏览某个论坛的时候,第一次看到了JavaScript原型链污染漏洞。当时非常的好奇,当时我一直以为js作为一种前端语言,就算存在漏洞也是针对前端,不会危害到后端,因此我以为这种漏洞危害应该不大。可当我看到他的漏洞危害还有可以执行任意命令的时候,发现可能我想

    2024年02月10日
    浏览(40)
  • JavaScript原型链污染学习记录

    0 原型及其搜索机制 NodeJS原型机制,比较官方的定义: 我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象, 而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法 设计原型的初衷无非是对于每个实例对象,其拥有的共同

    2024年02月02日
    浏览(42)
  • 安全作业-Race竞争型漏洞、原型链污染

      一、第一题js代码 获取flag的条件是 传入的querytoken要和user数组本身的admintoken的MD5值相等,且二者都要存在。 由代码可知,全文没有对user.admintokn 进行赋值,所以理论上这个值时不存在的,但是下面有一句赋值语句: data , row , col ,都是我们post传入的值,都是可控的,所以

    2024年02月13日
    浏览(35)
  • 《MS17-010(永恒之蓝)—漏洞复现及防范》

    作者: susususuao 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。 - 永恒之蓝 永恒之蓝(Eternal Blue)是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。而SMB服务是一个协议名,它能被用于Web连接和客户端与服

    2024年02月06日
    浏览(86)
  • 安全基础 --- 原型链污染

    大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承。传统上,JavaScript 语言的继承不通过 class,而是通过“原型对象”(prototype)实现 JavaScript 规定,每个函数都有一个 prototype 属性,指向一个对象 js中类的建立 js 中,定义一个类,需以 定义“构造函数”

    2024年02月10日
    浏览(35)
  • 原型污染

    原型污染是一种针对JavaScript运行时的注入攻击。通过原型污染,攻击者可以控制对象属性的默认值,从而篡改应用程序的逻辑并可能导致服务被拒绝,甚至在某些极端情况下远程执行代码。 现在,你是不是满脑子充满了各种疑问。到底什么是“在运行时改写对象的属性”?

    2024年02月05日
    浏览(42)
  • 网络安全--原型链污染

    目录 1.什么是原型链污染 2.原型链三属性 1)prototype 2)constructor 3)__proto__ 4)原型链三属性之间关系  3.JavaScript原型链继承 1)分析 2)总结 3)运行结果   4.原型链污染简单实验 1)实验一  2)实验2 原型链污染(Prototype Pollution)是一种web应用程序中常见的安全漏洞,主要影响

    2024年02月14日
    浏览(43)
  • 网络安全之原型链污染

    目录: 一、概念 二、举例 三、 实操了解 总结 四、抛出原题,历年原题复现 第一题: 五、分析与原理  第二题: 八、分析与原理 九、具体操作,payload与结果 结果:    JavaScript 规定,所有对象都有自己的原型对象(prototype)。一方面,任何一个对象,都可以充当其他对

    2024年02月13日
    浏览(42)
  • 【安全】原型链污染 - Hackit2018

    目录 准备工作 解题 代码审计 Payload         将这道题所需依赖模块都安装好后          运行一下,然后可以试着访问一下,报错是因为里面没内容而已,不影响,准备工作就做好了 代码审计  解题关键就在这里,将请求体里面的row,col,data都是我们post传进去的可控的

    2024年02月11日
    浏览(41)
  • js实现原型链污染,沙箱绕过

    沙箱绕过\\\"是指攻击者利用各种方法和技术来规避或绕过应用程序或系统中的沙箱(sandbox)。沙箱是一种安全机制,用于隔离和限制应用程序的执行环境,从而防止恶意代码对系统造成损害。它常被用于隔离不受信任的代码,以防止其访问敏感数据或对系统进行未授权的操作

    2024年02月13日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包