ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

(转载)浅析DOM型XSS

2021-09-20 16:34:41  阅读:137  来源: 互联网

标签:XSS DOM URL 文档 浅析 输入 页面


文章转自以下链接:浅析DOM型XSS
推荐点击阅读原文。本博客只作为自己理解使用。

DOM以及DOM型XSS

官方的说法是:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。
上面的话我个人觉得不是很好理解。我们来一句一句解释一下。它给文档提供了一种结构化的表示方法。
通过下图我们可以理解这句话的意思
在这里插入图片描述
上图是HTML DOM定义的结构,我们可以看出来其中包含了HTML中定义的所有元素和对象属性,通过上面的DOM树进行了展现。这就是一种规定。
接着第二句,可以改变文档的内容和呈现方式
由于定义了上面的结构,因此在客户端页面进行渲染的时候,可能会根据用户的不同的输入将输入的内容嵌入到页面中某一部分,也可能删除页面中的一部分渲染代码。这个地方就是对页面的代码进行了修改,那么就有可能造成XSS。
举个例子:如果输入框中需要我们写入name,如果name变成了一段XSS的代码,脚本处理这段代码后就会被嵌入页面,这就产生了DOMXSS。

DOM型XSS是基于DOM文档对象模型的一种漏洞。严格地说,DOM型XSS其实算反射型XSS,(也有看说DOM型XSS可以产生反射也可以产生存储型XSS)。区别在于DOM型XSS并不会和后台进行交互,是完完全全的Web前端安全问题,要做防御也只能在客户端上进行防御。

首先,客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它并不与服务端进行交互而是从客户端获得DOM中的数据(如从URL中获取数据)并在本地执行;其次,浏览器用户可以操纵DOM中的一些对象如URL、location等;因此,当攻击者可以控制一些DOM对象、输入一些恶意JS代码,而客户端的脚本并没有对用户输入内容进行有效的过滤就传入一些执行危险操纵的函数如eval等或直接输出到页面时,就会导致DOM型XSS漏洞的存在。

例子

接着参考大佬的那篇文档

<!DOCTYPE html>
<html>
<head>
	<title>DOM XSS</title>
</head>
<body>
<script>
	var pos=document.URL.indexOf("name=")+5;
	document.write(decodeURI(document.URL.substring(pos,document.URL.length)));
</script>
</body>
</html>

如上面的HTML文件就存在DOM型XSS,其功能是当我们在URL栏输入参数name的值后,就会在当前页面显示输入如的name的值,其功能的实现全都在前端JS中进行、未与后台进行任何交互。
从代码层面看,漏洞形成原因很简单,document.URL获取用户输入,在代码中未经过任何过滤就传递给了document.write输出到当前页面中。
当我们正常输入name值时页面直接显示输入的内容,F12查看DOM文档可看到输入的内容确实是插入到当前DOM结构中:
在这里插入图片描述
也就是说DOM结构我们用户输入可控,当我们输入XSS payload时就会弹框,造成DOM型XSS:
在这里插入图片描述
以上就是一个DOM-XSS的例子。

标签:XSS,DOM,URL,文档,浅析,输入,页面
来源: https://blog.csdn.net/zr1213159840/article/details/120392030

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有