---
tags: [计算机网络, CSRF, XSS, XXE, CORS, Web安全]
create time: 2026-05-18 05:05
---
# Web 应用攻击面:CSRF / XSS / XXE
## 概述
L7(应用层)攻击是黑客最常利用的层面。CSRF、XSS、XXE 三个名字相似但原理迥异,理解它们的区别和对应的防御手段是每个后端开发者的必修课。
## CSRF vs XSS vs XXE —— 三巨头对比
```mermaid
flowchart LR
subgraph "CSRF: 借用户的身份做操作"
direction TB
C1["用户已登录银行网站"] --> C2["访问恶意页面
包含
"]
C2 --> C3["浏览器自动带上 cookie → 转账成功"]
end
subgraph "XSS: 在用户浏览器执行脚本"
direction TB
X1["网站注入恶意 JS"] --> X2["其他用户打开含攻击页面的链接"]
X2 --> X3["脚本在受害者上下文中执行 → 窃取 cookie"]
end
style C1 fill:#DDA0DD,color:#000
style X1 fill:#FFD700,color:#000
```
### 详细对比表
| 特性 | CSRF | XSS (Reflected) | XSS (Stored) | XXE |
|------|------|-----------------|--------------|-----|
| **全名** | Cross-Site Request Forgery | Cross-Site Scripting | Stored/Persistent XSS | XML External Entity |
| **攻击目标** | 服务器操作 | 客户端浏览器 | 客户端浏览器 | 服务器文件系统/内网 |
| **核心漏洞** | 服务端没验证请求来源 | 输入未过滤直接输出到页面 | 持久化存储了恶意内容 | XML 解析器处理了外部实体 |
| **用户需操作** | 只需打开恶意页面 | 只需点击带payload链接 | 完全被动 | 无需用户参与 |
| **防御方式** | SameSite Cookie, CSRF Token, Referer 检查 | CSP, 输入编码, HTTPOnly Cookie | 同上 + 富文本 sanitizer | 禁用 DTD/外部实体 |
| **危害等级** | 高(能代用户操作) | 中高(能盗取会话) | 最高(持久传播) | 极高(RCE/文件读取) |
| **OWASP排名** | #9 | #3 | #3 | N/A |
### CSRF 详解
```
攻击流程:
─────────────────────────────────────
1. 用户在 bank.com 已登录(cookie 有效中)
2. 用户访问 evil.com
3. evil.com 包含:
4. 用户点击提交 → 浏览器自动携带 bank.com 的 cookie
5. bank.com 以为是合法操作 → 转账成功 💸
```
```go
// ❌ 没有 CSRF 保护的 Go handler
func TransferHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodPost {
to := r.FormValue("to")
amount := r.FormValue("amount")
// ⚠️ 没有验证请求来源!任何网站都能伪造 POST 请求
transferMoney(to, amount)
}
}
// ✅ 方案一:CSRF Token
type CSRFStore struct {
tokens sync.Map // token → userID + expiry
}
func GenerateCSRFToken(userID string) (string, error) {
tokenBytes := make([]byte, 32)
rand.Read(tokenBytes)
token := base64.URLEncoding.EncodeToString(tokenBytes)
store.tokens.Store(token, userID)
go func() {
time.Sleep(24 * time.Hour)
store.tokens.Delete(token) // token 过期清理
}()
return token, nil
}
// ✅ 方案二:SameSite Cookie(现代浏览器原生支持)
http.SetCookie(w, &http.Cookie{
Name: "session",
Value: sessionID,
Path: "/",
HttpOnly: true, // JS 无法读取
SameSite: http.SameSiteStrictMode, // ← 关键!禁止跨站携带
})
```
```nginx
# Nginx 层面的 CSRF 防御
location /api {
# 校验 Referer(可被浏览器插件或旧浏览器绕过,仅作第二道防线)
if ($http_referer !~* ^https://(www\.)?yourdomain\.com) {
return 403;
}
proxy_pass http://backend;
}
```
### XSS 详解
```
反射型 XSS 流程:
───────────────────────
1. 攻击者构造恶意 URL:
https://site.com/search?q=
2. 受害者点击该 URL
3. 服务器把 q 参数原样放回 HTML 响应中
4. 浏览器执行脚本 → cookie 被盗 🚨
存储型 XSS 流程:
───────────────────────
1. 攻击者在评论区发帖:
2. 帖子被存入数据库
3. 所有浏览此页面的用户都会执行恶意脚本
4. 比反射型 XSS 危害大 10 倍(一次注入,无限受害)
```
```go
// ✅ Go 的 html/template 自动转义,是最强的 XSS 防御
import "html/template"
tmpl, _ := template.New("search").Parse(`
Search results for: {{.Query}}
`)
// tmpl.Execute(w, data) → 输出中的特殊字符已被转义
```
```bash
# CSP (Content Security Policy) 头 — XSS 的第二道防线
# 即使 XSS payload 被执行了,CSP 也能阻止它加载外部资源
HTTP/1.1
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.trusted.com; style-src 'self' 'unsafe-inline'
# default-src 'self' → 只允许同源资源
# script-src 'self' ... → 禁止内联 script 和外部未知域
```
### XXE 详解
```xml
Alice
alice@example.com
]>
&xxe;
```
```go
// ✅ Go 的 encoding/xml 默认禁用外部实体,相对安全
// 但仍需注意 SAX parser 等第三方库的安全配置
// Java 中需要明确关闭 XXE
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setExpandEntityReferences(false);
```
## CORS vs CSRF —— 经常被混淆的两个概念
```
CORS (Cross-Origin Resource Sharing):
──────────────────────────────────────
• 浏览器的安全策略,防止网页加载跨域资源
• 由浏览器自动执行,服务器通过响应头配合
• Access-Control-Allow-Origin: https://trusted.com
CSRF (Cross-Site Request Forgery):
────────────────────────────────────
• 攻击者利用已登录用户的凭证伪造请求
• 与 CORS 无关!CORS 不防 CSRF
• 防御用 SameSite Cookie + CSRF Token
```
> [!important] 核心结论
> CORS 不是 CSRF 的替代品。即使一个站点禁用了 CORS(`Access-Control-Allow-Origin: *`),依然会受到 CSRF 攻击。两者保护的是不同层面的安全问题。
## 关联笔记
- [[hhs/NETWORK/DDoS与MITM防御]] — L3/L4 攻击面的补充
- [[hhs/NETWORK/JWT认证与授权安全]] — JWT 也是攻击重灾区
- [[hhs/NETWORK/TLS安全实践]] — HSTS 是防范协议降级攻击的基础