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

浏览器解码顺序xss

浏览器解析和执行内容时遵循特定的解码顺序,这对XSS(跨站脚本攻击)的防御至关重要。攻击者常利用解码顺序的差异绕过过滤。以下是浏览器处理不同上下文的典型解码顺序:


1. HTML 解析优先

浏览器首先将响应作为HTML文档解析,按顺序处理:

  • 字符实体解码
    &lt;< , &gt;>, &amp;& 等被还原。

    <!-- 输入: -->
    &lt;img src=x onerror=alert(1)&gt;
    <!-- 解码后: -->
    <img src=x onerror=alert(1)>
    
  • 标签/属性解析
    浏览器识别标签(<div><script>)和属性(hrefonclick)。


2. JavaScript 执行(在特定上下文中)

当解析到 <script> 标签或事件处理器(如 onload)时,浏览器进入JS解析模式:

  • JS字符串解码
    Unicode转义(\u0061a)、十六进制(\x61a)被还原。

    // 输入:
    \u0061lert(1);
    // 解码后执行:
    alert(1);
    
  • 注意:HTML实体在JS中不会被二次解码

    <script>// 以下代码不会执行,因为 &lt; 在JS中是字符串var x = "&lt;img src=x onerror=alert(1)&gt;"; 
    </script>
    

3. 特殊属性/协议的处理

某些属性触发额外解析层:

  • href/src 等URL属性
    若协议为 javascript:,会进行URL解码

    <!-- 输入: -->
    <a href="javascript:%61lert(1)">Click</a>
    <!-- 解码后: -->
    <a href="javascript:alert(1)">Click</a>
    
  • CSS 中的解析
    style 属性或 <style> 标签内支持 \XX 十六进制解码:

    <div style="background:url(javascript:alert(1))"></div>
    

关键顺序总结

graph LR
A[原始响应] --> B[HTML 实体解码] 
B --> C[HTML 标签/属性解析]
C --> D{是否在 JS/CSS/URL 上下文?}
D -- JS --> E[JS 转义字符解码]
D -- URL --> F[URL 解码]
D -- CSS --> G[CSS 转义解码]
E --> H[执行 JS]
F --> H
G --> H

XSS 攻击的关键点

  1. 上下文混淆

    • 过滤器可能只转义 HTML 实体(如 <&lt;),但若payload在 <script> 中,需转义JS语法(如 "\x22)。
    • 例:
      <script>var user = "{{ user_input }}";  // 需防御JS字符串而非HTML
      </script>
      
  2. 编码嵌套绕过
    多层编码可能绕过简单过滤器:

    <!-- 输入: -->
    <a href="javascript:&amp;#x61;lert(1)"></a>
    <!-- 解码步骤: -->
    <!-- 1. HTML解码:&#x61; → &#x61; (&amp;已被解码为&) -->
    <!-- 2. URL解码:javascript:%61lert(1) → javascript:alert(1) -->
    

防御建议

  • 根据输出上下文转义
    • HTML 正文:<&lt;
    • HTML 属性:"&quot;
    • JS 字符串:动态内容用 \xHH 转义
    • URL:严格校验协议(禁止 javascript:
  • 使用安全框架自动处理(如React的JSX、DOMPurify)。
  • 避免将用户输入放在高危位置(如 <script>hrefeval())。

文章转载自:
http://noisy .lbooon.cn
http://liberalistic .lbooon.cn
http://abiotrophy .lbooon.cn
http://asphyxy .lbooon.cn
http://tonsorial .lbooon.cn
http://pondoland .lbooon.cn
http://extract .lbooon.cn
http://poet .lbooon.cn
http://superhighway .lbooon.cn
http://solubilizer .lbooon.cn
http://fro .lbooon.cn
http://ept .lbooon.cn
http://winnable .lbooon.cn
http://allopatrically .lbooon.cn
http://korea .lbooon.cn
http://reshape .lbooon.cn
http://warm .lbooon.cn
http://unescorted .lbooon.cn
http://jackladder .lbooon.cn
http://untrue .lbooon.cn
http://promenade .lbooon.cn
http://cohune .lbooon.cn
http://randomly .lbooon.cn
http://herborize .lbooon.cn
http://stoneware .lbooon.cn
http://wanderlust .lbooon.cn
http://back .lbooon.cn
http://megavitamin .lbooon.cn
http://scatoscopy .lbooon.cn
http://benignantly .lbooon.cn
http://www.dtcms.com/a/293018.html

相关文章:

  • UE5 UI WarpBox 包裹框
  • Leetcode力扣解题记录--第41题(原地哈希)
  • 【Pytest】从配置到固件的使用指南
  • 【工作常用】C++/QT插件编程思想——即插即用
  • Elasticsearch 学习笔记
  • 从零开始学习 NumPy 库:核心功能与实践指南
  • 应用层攻防启示录:HTTP/HTTPS攻击的精准拦截之道
  • AI视频-剧本篇学习笔记
  • 《AR眼镜上声学的应用与挑战》
  • pytorch中的torch.compile是如何加速vLLM大模型推理的?
  • 信息学奥赛一本通 1553:【例 2】暗的连锁
  • 跨境企业破局国际市场:海外媒体发稿如何为品牌声誉赋能?
  • 蔚来汽车视觉算法面试30问全景精解
  • 原型链污染
  • 【Phenix】使用教程1|使用phenix.map_model_cc进行结构验证|整体结构CC计算/单个氨基酸的CC
  • Windows入侵排查入门实例
  • 前端_CSS复习
  • 基于 NumPy 的高效数值计算技术解析与实践指引
  • Navicat 远程连接SQLlite数据库
  • 前端学习日记(十)
  • 5G 智慧矿山监控终端
  • Python vs C++ 深度对比
  • 【实例】集团性企业数据整合指南:分子公司到总部的接入方案
  • 类加载过程及双亲委派模型
  • 木马派RV1106开发板驱动AIC8800DC USB蓝牙模块,用bluez-alsa库与蓝牙音箱配对并播放wav声音文件
  • 101.对称二叉树
  • 深入解析 Pandas:Python 数据分析的强大工具
  • 浅谈——C++和C#差异
  • 面试150 括号生成
  • 【3GPP】5G专用词汇1