# 威胁建模：你到底在防谁

> 不做威胁建模的安全工作是在拜神——四类攻击者的动机与手法截然不同，防住脚本小子的措施对定向攻击毫无意义。用一张表把「防谁、护什么、丢了多疼」问清楚。

- 作者：David（道雾轩）
- 专栏：网站安全一本通（https://daiw.net/manual/web-security.md）
- 最后更新：2026-08-11
- 原文：https://daiw.net/manual/web-security/threat-model
- 转载与引用：请注明出处并附原文链接（https://daiw.net/about/copyright）

# 威胁建模：你到底在防谁

先问一个问题：**你的网站被打了，最坏的结果是什么？**

如果答不上来，后面所有的加固都是在凭感觉花钱。有人给个人博客上了 WAF 高级版，却把数据库密码明文写在 GitHub 公开仓库里——**防线的强度不重要，最薄的那一环才重要**，而找出最薄的那一环，靠的就是威胁建模。

## 四类攻击者，四种打法

把「攻击者」当成一个笼统概念是最大的误区。他们的动机、耐心、能力天差地别：

| 类型 | 动机 | 典型手法 | 对你的实际威胁 |
| --- | --- | --- | --- |
| **自动化扫描器** | 广撒网，不针对你 | 扫全网 IP，试已知 CVE、默认口令、`.git` 泄露、`.env` 泄露 | **占实际攻击量的 95% 以上**，也最好防 |
| **脚本小子** | 炫技、挂黑页 | 用现成工具跑一遍，看哪个洞能进 | 主要打没打补丁的老系统 |
| **牟利型** | 挖矿、勒索、卖数据、薅羊毛 | 找能变现的：接口刷量、数据库脱库、服务器算力 | **有电商/会员/积分的站要重点防** |
| **定向攻击** | 特定目标，有预算有耐心 | 社工、供应链、0day、长期潜伏 | 个人站基本遇不上；真遇上了，单靠技术措施挡不住 |

**这张表最重要的一行是第一行。** 绝大多数「被黑」不是有人盯上了你，而是你的服务器恰好出现在某个扫描器的 IP 段里，恰好开着一个有已知漏洞的服务。

这带来一个非常实际的结论：

<Callout type="info">
  **把 80% 的精力花在挡住自动化扫描上，投入产出比最高。** 具体就是三件事：**及时打补丁、不要有默认口令、不要泄露不该公开的文件**。这三件事做到位，你已经躲过了绝大多数真实攻击。

  反过来，如果这三件没做，买再贵的 WAF 也只是给一栋没锁门的房子装了监控。
</Callout>

## 三个问题，问清楚就够了

正式的威胁建模有 STRIDE、PASTA 一堆方法论。对一个网站来说，回答清楚三个问题就足以指导行动：

### 一、护什么（资产）

把你系统里「丢了会疼」的东西列出来，按疼的程度排序：

| 资产 | 例子 | 丢了会怎样 |
| --- | --- | --- |
| **用户凭据** | 密码哈希、会话 token、OAuth refresh token | 最严重：会被拿去撞库，波及用户在别处的账号 |
| **个人信息** | 手机号、身份证、地址、订单 | 法律责任（个人信息保护法），且不可撤销 |
| **业务数据** | 订单、内容、配置 | 直接业务损失 |
| **算力与带宽** | 服务器、CDN 流量 | 被挖矿、被当跳板；账单可能是数量级的 |
| **域名与声誉** | 域名本身、搜索排名 | 被挂马后搜索引擎标红，恢复要数周 |

**很多人漏掉最后两项。** 一台被挖矿的云服务器，一个月能烧掉远超你预算的钱；一个被挂了黑帽 SEO 的博客，搜索流量清零。

### 二、从哪进（入口）

把所有「外部输入能到达的地方」列出来。不只是表单——凡是攻击者能控制内容的，都是入口：

- HTTP 请求的每个部分：URL 路径、query、Header（含 `Host`、`User-Agent`、`Referer`）、Cookie、body
- 文件上传
- 第三方回调（支付、OAuth、Webhook）
- **你依赖的一切**：npm 包、Docker 基础镜像、CDN 上的第三方脚本
- 运维通道：SSH、云控制台、CI/CD、域名注册商后台

<Callout type="warn">
  **最后一项是最容易被整体遗忘的。** 你把网站加固到牙齿，但域名注册商账号用的是复用密码、没开二次验证——攻击者直接改 DNS 把域名解析到自己的服务器，你所有的 Nginx 配置、WAF 规则、后端校验**一行都不会被执行**。

  [下一部分第一篇](https://daiw.net/manual/web-security/registrar-security)专门讲这件事，它排在最前面不是偶然。
</Callout>

### 三、丢了多疼（影响）

同样是「泄露一张表」，泄露文章列表和泄露用户手机号，严重性差几个数量级。用这个粗略的分级排优先级：

- **P0 · 不可挽回**：明文密码、身份证、支付信息泄露；服务器被完全控制。
- **P1 · 严重但可控**：会话劫持、越权读取他人数据、内容被篡改。
- **P2 · 有损失但能恢复**：短时 DoS、资源被薅。
- **P3 · 主要是难看**：版本号泄露、目录列表打开。

**修复顺序按 P 级走，不按修复难度走。** 一个花两天修的 P0，优先级高于十个花十分钟修的 P3——虽然后者做起来更有成就感。

## 一个真实的例子：给个人博客建模

拿本站这类静态博客做示范，结论可能和你想的不一样：

| 项 | 结论 |
| --- | --- |
| 主要攻击者 | 自动化扫描器（几乎唯一） |
| 核心资产 | **域名**（最值钱）、服务器算力、搜索排名 |
| 用户数据 | **几乎没有**——纯静态站，没有登录、没有数据库 |
| 最高风险 | 域名被劫持；服务器被当矿机；CI/CD 凭据泄露导致投毒 |
| 最不值得投入 | SQL 注入防护（没有数据库）、复杂的 WAF 规则 |

**注意最后一行。** 一个纯静态站去研究 SQL 注入防护是浪费时间；但很多安全清单会把它列在第一条，因为那些清单不是为你写的。

反过来，这类站真正的高风险在**供应链**：CI/CD 里的一个 token 泄露，攻击者就能直接改构建产物，往每个页面里插一段脚本。这比任何 XSS 都严重，因为它绕过了所有前端防御。[后面有一整章](https://daiw.net/manual/web-security/secrets)讲密钥管理。

## 小结

- 95% 以上的攻击来自不针对你的自动化扫描，**打补丁 + 无默认口令 + 不泄露文件**能挡住大部分。
- 建模只需回答三问：**护什么、从哪进、丢了多疼**。
- 入口清单必须包含**运维通道**（注册商、CI/CD、云控制台），它们常被整体遗忘。
- 按影响分级排优先级，不要按修复难度。

下一章把「从哪进」这个问题铺开——跟着一次请求，看它一路经过多少个可以被做手脚的地方。👉 [一次请求的旅程](https://daiw.net/manual/web-security/request-journey)
