zoukankan      html  css  js  c++  java
  • xss和实体编码的一点小思考

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

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

    已知的问题:

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

    我们可以在标签内通过实体编码触发xss:
    <a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;%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是可以操作节点进行增删改操作的。
  • 相关阅读:
    [算法][求积分][复合辛普森公式]
    [51单片机] SPI nRF24L01无线 [可以放在2个单片机里实现通信]
    [51单片机] SPI nRF24L01 无线简单程序 1
    [stm32] 利用uC-BmpCvt软件生成uc-gui可调用的bmp图片
    [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画
    [stm32] 中断
    [C++] 将 mp3 等音乐资源以资源形式嵌入 exe 文件中
    [游戏学习28] MFC 时钟
    [游戏学习27] MFC 匀速运动
    [游戏学习26] MFC 时间函数 画图形
  • 原文地址:https://www.cnblogs.com/escape-w/p/10162831.html
Copyright © 2011-2022 走看看