xss和实体编码的一点小思考

首先,浏览器渲染分以下几步:

  1. 解析HTML生成DOM树。
  2. 解析CSS生成CSSOM规则树。
  3. 将DOM树与CSSOM规则树合并在一起生成渲染树。
  4. 遍历渲染树开始布局,计算每个节点的位置大小信息。
  5. 将渲染树每个节点绘制到屏幕。

已知的问题:

"" 之间的xss我们都知道可以使用伪协议,那么如果冒号或者javascript等关键字被过滤了我们应该如何解决?

我们可以在标签内通过实体编码触发xss:

<a href="javascript:%6
1%6c%65%72%74%28%32%29">test</a>

浏览器遇到html标签 会对标签里面的实体编码进行解码 如果解码后存在javascript: 则会执行js伪协议触发xss

那么我这个菜鸡开始思考,既然实体编码会被html自解码,那么为什么过滤xss的方法之一是实体编码特殊符号呢 为什么<>的实体编码没有自解码后被解析成一个新的dom节点呢?通过查询资料我得到了一个答案:

浏览器最早开始解析HTML,将标签转化为内容树中的DOM 节点,此时识别标签的时候,HTML 解析器是无法识别那些被实体编码的内容的,只有建立起DOM 树,才能对每个节点的内容进行识别,如果出现实体编码,则会进行实体解码。在此基础上,JavaScript DOM API 参与进来,可以对DOM 树进行修改,改变DOM树的结构和内容。

这段话说的比较清楚了,在dom树构建之时,html实体编码是没有被自解码的,那么此时dom树的节点结构就已经被固定了。后续自解码以后并不会影响到dom树/节点/标签的结构。这个道理和sql中的预编译是有些类似的。之后的自解码以后获得的<>将不会被解析成新的节点。 但并不是说dom树构建完毕后就不能被改变了。js是可以操作节点进行增删改操作的。

原文地址:https://www.cnblogs.com/escape-w/p/10162831.html

时间: 2024-10-11 17:31:48

xss和实体编码的一点小思考的相关文章

MySQL-Front 建表引发的一点小思考(数据表格模版)

我们建表的时候,有一些字段总是会常用到的.也就是每一张表都会有这些字段. 我用mysql有一点时间了,今天(2016-02-27 21:53:38)在用mysql-front建表的时候,感觉有点点不太舒服. 就是某些表格中的字段,基本上每一张表都会用到.我的做法是 从 某张建好的表格上复制过来.每次都需要点开已经 新建好的数据表来复制,粘贴字段.感觉有点点不方便. 然后我在想,如果可以提供一种类似 Visual studio 那种建项目的项目模板就好了.于是,查阅了下资料,在 github 上找

关于微信支付安全的一点小思考

这是微信支付的业务流程: 在调用微信支付进行下单付款的时候,首先要调起'统一下单接口先调用[统一下单API]生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付. 在调用统一下单API的时候需要处理大量的参数,要进行加密.拼接等操作,还涉及到iOS.安卓的统一. 因此我在想,如果只把商品的某些信息如id上传到服务器端,由后台重新从服务器调取商品信息,生成微信支付需要的相关字段并返回给手机端,在手机端进行拼接后直接调取[WXApi sendReq:request];进行付款.

sqlserver数据库不能重命名报错5030——我的一点小思考

在学习asp.net的时候使用mssql‘经常会出现这种错误,数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use master select spid from master.dbo.sysprocesses where dbid=db_id(‘ODatabaseName‘) 这时我们就有两个解决方案方案一就是使用 use master kill 54 方案二就是在现有数据库上设置单用户模式 原文地址:https://

XSS与字符编码的那些事儿

目录 0x00:基本介绍 0x01:html实体编码 0x02:新增的实体编码 实体编码变异以及浏览器的某些工作原理! 0x03:javascript编码 0x04:base64编码 0x05:闲扯 0x00基本介绍 提起XSS 想到的就是插入字符字符编码与各种解析了! 这也就是各种xss编码插件跟工具出世的原因!之前不懂浏览器是如何对我们编码过的代码进行解析的时候就是一顿乱插! 各种编码 各种插 没把编码还原就算了 还原了就算运气好!后来到PKAV经过二哥和短短的调教后才算是弄清楚了一点编码与

新闻发布的一点小总结

经过一段时间的学习,完成了新闻发布的基础功能,进行一点小总结,方便日后回顾.下面是我的一点小总结,不足之处请勿见笑... 我们想要完成一个新闻发布,首先要使其能够成功发布,并且让它能够实现添加.删除.修改.查询.上传.下载等功能.我们还调用AJAX功能查看输出为XML.JSON格式的新闻内容.为完成以上功能,我们首先要进行jdk.tomcat.eclipse的安装和配置.1.各软件的安装和配置1.1.jdk的安装和配置: 1.1.1.下载jdk:下载地址:http://www.oracle.co

关于学习python的一点小建议

Python是最容易入门的编程语言,没有之一.如果初学者接触的第一门语言是C或者C++,对他们来说最难的不是语法,而是容易出现内存泄漏.指针等问题.有时候排查这些问题对初学者的打击很大,尤其是没掌握排查BUG技巧时. 如果初学者接触的第一门语言是Python,学习曲线则会平滑得多,掌握一些基本语法和Python内置的数据结构,已经可以上手写一些小工具或者小型应用.这对初学者来说,非常重要.因为学习的过程是一个突破舒适区的过程,会面临很多痛苦,如果学习过程得不到激励,很容易半途而废,类似我们开玩笑

web安全之XSS基础-常见编码科普

0x01常用编码 html实体编码(10进制与16进制): 如把尖括号编码[ < ]  -----> html十进制: <  html十六进制:< javascript的八进制跟十六进制: 如把尖括号编码[ < ]  -----> js八进制:\74  js十六进制:\x3c jsunicode编码: 如把尖括号编码[ < ]  ----->jsunicode:\u003c url编码 base64编码: 如把尖括号编码[ < ]  ----->

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

【搬运工】一点小收集

1.几种基础算法. 2.数学之美. 3.贝叶斯方法. 转自互联网,链接背后都是故事,水深,都是鱼. 敬意且谨以自勉,长途漫漫,任重道远. 以上. [搬运工]一点小收集,布布扣,bubuko.com