浅析XSS原理与分类——含payload合集和检测与防护思路
2026/7/2 8:24:52 网站建设 项目流程

一、原理与分类

XSS的根源在于不可信数据被未经过滤地注入了HTML/JS上下文

1. 反射型 XSS

  • 特点:非持久化,恶意脚本通过URL参数、表单提交等方式发送给服务器,服务器将脚本“反射”回响应页面中。

  • 触发:需要诱导用户点击恶意链接(通常结合钓鱼或短链接)。

  • 示例

    // 危险代码
    echo "欢迎: " . $_GET['name'];

    name=<script>alert(1)</script>,则脚本直接执行。

2. 存储型 XSS

  • 特点:持久化,恶意脚本被存储在后端(数据库、文件系统等),当其他用户访问正常页面时,脚本被加载执行。
  • 危害:影响范围广,常见于评论区、个人信息、帖子等场景。
  • 示例:攻击者在留言板提交<script>stealCookie()</script>,所有浏览留言的用户都会中招。

3. DOM型 XSS

  • 特点:完全在前端发生,不经过服务器后端逻辑。通过修改页面DOM环境(如location.hashdocument.referrerinnerHTML等)注入恶意脚本。

  • 区别:服务器响应与正常页面无异,恶意代码在客户端本地执行。

  • 示例

    // 危险代码
    var hash = location.hash.slice(1);
    document.getElementById("output").innerHTML = hash;

    访问page.html#<img src=x onerror=alert(1)>即可触发。

回到顶部

二、绕过姿势(进阶技巧)

防御机制(如输入过滤、输出编码、CSP)不断演进,攻击者也总结出大量绕过手法。以下列举经典及现代绕过思路:

1. 上下文感知绕过

  • HTML标签内:当输出点在标签属性(如<input value="...">)时,可提前闭合引号并注入新事件:

    " οnmοuseοver="alert(1)

  • JavaScript代码中:如果输出在<script>标签内,需考虑闭合字符串或利用模板字符串:

    var name = '用户输入'; // 若输入 ';alert(1);// 则逃逸

2. 编码绕过

  • HTML实体编码:某些过滤仅检查<>,但浏览器在解析HTML属性时会先解码实体:

  • Unicode/URL编码:在javascript:伪协议或data:中使用。

  • 多重编码:针对递归解码的过滤器,使用两次URL编码。

3. 事件与伪协议滥用

  • HTML5新事件onloadonerroronfocusonpointermove等。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询