当前位置: 首页 > news >正文

深入理解浏览器解析机制和XSS向量编码

URL 编码 "javascript:alert(1)"---->%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29

<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>-------浏览器解析不了。
页面识别在url解码之前,在识别标签和属性的时候还没解码,页面就不认识这串编码,不会把它们当作 JS 代码执行
<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">
页面识别的时候,已经进行HTML实体解码,变成了<a href="javascript:%61%6c%65%72%74%28%32%29">aaaaa</a>浏览器会识别它为可执行JS代码。
页面的解析顺序:html实体编码---->urlencode---->unicode
<a href="javascript%3aalert(3)"></a>
不能识别
因为“:”被url编码了,javascrip:才能被浏览器识别为可执行JS代码。
<div>&#60;img src=x onerror=alert(4)&#62;</div>---HTML字符实体编码 < 和 >
能解码但是无法解析
把“<”和“>”HTML实体编码后不会进入标签开始状态(涉及到html的状态机制)
<textarea><script>alert(6)</script></textarea>-----无法解析
RCDATA元素(RCDATA elements),有<textarea>和<title> 。可以容纳文本和字符引用。但是一旦有字符引用可能就无法进入标签开始状态大概率利用不了。
<script>&#97;&#108;&#101;&#114;&#116;&#40;&#57;&#41;&#59;</script>
原始文本元素(Raw text elements),有<script>和<style>,可以容纳文本。只能把里面的内容当做文本  利用不了
​
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
JavaScript引擎在解析代码时,会先处理Unicode转义,然后再执行代码。
解析后的代码:<script>alert(10);</script>
​
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>(JS严格区分大小写,不能对符号编码)
​
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>不能解析
JS将解码后,会认为它是一个字符串,字符串要用单引号引起来。
​
<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;">aaa</a>
首先被解码为javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)
此时浏览器会识别它为可执行JS代码,然后会进行urlencode解码\u0061\u006c\u0065\u0072\u0074,然后进行unicode解码alert
http://www.dtcms.com/a/288936.html

相关文章:

  • Java中List<int[]>()和List<int[]>[]的区别
  • React-Native开发环境配置-安装工具-创建项目教程
  • 数据并表技术全面指南:从基础JOIN到分布式数据融合
  • Pinia 核心知识详解:Vue3 新一代状态管理指南
  • 六边形滚动机器人cad【7张】三维图+设计书明说
  • [数据库]Neo4j图数据库搭建快速入门
  • 反激电源中的Y电容--问题解答
  • Python类中方法种类与修饰符详解:从基础到实战
  • linux shell从入门到精通(一)——为什么要学习Linux Shell
  • MybatisPlus-14.扩展功能-DB静态工具-练习
  • 0401聚类-机器学习-人工智能
  • VSCode中Cline无法正确读取终端的问题解决
  • Github 贪吃蛇 主页设置
  • hot100——第八周
  • 【文件IO】认识文件描述符和内核缓冲区
  • docker Neo4j
  • 【论文阅读笔记】RF-Diffusion: Radio Signal Generation via Time-Frequency Diffusion
  • Vue3虚拟滚动实战:从固定高度到动态高度,告别列表卡顿
  • 从零开始的云计算生活——番外5,使用ELK实现对应用日志的监控
  • lvs调度算法(10种)
  • 【Docker基础】Docker-compose常用命令实践(一):服务生命周期管理
  • LVS技术详解与实战
  • Python dataclass 高阶用法与技巧
  • QML 图形效果详解
  • 深入解析Ext2文件系统架构
  • AI 量化工具汇总
  • C语言:二维数组
  • 【自动驾驶黑科技】基于Frenet坐标系的车道变换轨迹规划系统实现(附完整代码)
  • OneCode+CloudWeGo 深化实践:智能发货单的 LLM 逻辑推理引擎优化
  • 30天打牢数模基础-层次聚类讲解