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

  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是可以操作节点进行增删改操作的。

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

  1. Golang - 关于 proto 文件的一点小思考

    目录 前言 helloworld.proto 小思考 小结 推荐阅读 前言 ProtoBuf 是什么? ProtoBuf 是一套接口描述语言(IDL),通俗的讲是一种数据表达方式,也可以称为数据交换格 ...

  2. 信号处理——EMD、VMD的一点小思考

    作者:桂. 时间:2017-03-06  20:57:22 链接:http://www.cnblogs.com/xingshansi/p/6511916.html 前言 本文为Hilbert变换一篇的 ...

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

    我们建表的时候,有一些字段总是会常用到的.也就是每一张表都会有这些字段. 我用mysql有一点时间了,今天(2016-02-27 21:53:38)在用mysql-front建表的时候,感觉有点点不太 ...

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

    在学习asp.net的时候使用mssql‘经常会出现这种错误,数据库不能重名名5030的错误,其实很简单原因就是有应用程序正在占用这个连接,使用这样一行命令就可以查询出正在占用的连接 use mast ...

  5. python xss相关的编码解码小脚本

    1.功能分析: 实际工作中经常会遇到alert()之类的函数被防火墙过滤,而把alert()转化为ascii码放到String.fromCharCode()中就可以绕过,之前会一个一个查ascii表, ...

  6. XSS与字符编码的那些事儿

    目录 0x00:基本介绍 0x01:html实体编码 0x02:新增的实体编码 实体编码变异以及浏览器的某些工作原理! 0x03:javascript编码 0x04:base64编码 0x05:闲扯 ...

  7. [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考

    原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...

  8. 存储型XSS的发现经历和一点绕过思路

    再次骚扰 某SRC提现额度竟然最低是两千,而已经有750的我不甘心呐,这不得把这2000拿出来嘛. 之后我就疯狂的挖这个站,偶然发现了一个之前没挖出来的点,还有个存储型XSS! 刚开始来到这个之前挖过 ...

  9. 对接第三方服务引起的小思考-回调和Sign算法

    背景 ​ 最近在对接一个同事写的支付公用模块,然后对第三方服务引起一两个小思考. 思考 回调 来看看我们同事是如何做回调的. 首先,请求支付接口的时候,将回调URL作为请求body的一个参数[不加密] ...

随机推荐

  1. zjnu1181 石子合并【基础算法・动态规划】——高级

    Description 在操场上沿一直线排列着  n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆,  并将新的一堆石子数记为该次合并的得分.允许在第一次合并前对调一 ...

  2. Chip Factory HDU - 5536 字典树(删除节点|增加节点)

    题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...

  3. Python 装包与拆包

    装包就是把未命名的参数放到元组中,把命名参数放到字典中 a = 1, 2 print(a) (1, 2) 拆包将一个结构中的数据拆分为多个单独变量中 *args **kwargs def run1(* ...

  4. 2.PowerShell概述

    PowerShell PowerShell命令窗一般随系统带着,运行->输入:powershell,即可打开命令窗口. 命令 Powershell有诸多命令,兼容cmd命令 语法和命令 在此我推 ...

  5. 力扣567.字符串的排列—C语言实现

    题目 来源:力扣(LeetCode)

  6. k8s-0-集群

    Docker回顾 docker容器封装应用程序好处 内核在3.8以上,才能完整使用docker隔离功能(所有centos6不推荐用) Docker容器化封装应用程序缺点 容器编排工具有哪些 一: K8 ...

  7. nyoj-1236 挑战密室

    挑战密室 时间限制:1 s | 内存限制:128 M 提交 状态 排名 题目描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否 ...

  8. P1337 [JSOI2004]平衡点(模拟退火)题解

    题意: 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到地 ...

  9. 深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!

    英文:https://arpitbhayani.me/blogs/string-interning 作者:arpit 译者:豌豆花下猫("Python猫"公众号作者) 声明:本翻译 ...

  10. Vue & Sentry sourcemaps All In One

    Vue & Sentry sourcemaps All In One vue & sentry & sourcemaps https://docs.sentry.io/plat ...