# 注册商与域名账号安全

> 域名被劫持是唯一能让你所有技术防线一次性归零的攻击——注册商账号怎么被打下来、域名锁是什么、转移锁与 DNSSEC 怎么配，以及一份 10 分钟能做完的加固清单。

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

# 注册商与域名账号安全

这一章排在整个专栏最前面，理由很简单：

> **域名被劫持之后，你的 Nginx 配置、WAF 规则、CSP、参数化查询——一行都不会被执行。** 用户访问的是攻击者的服务器，你的日志里一片安静。

这是唯一一类能让**全部**技术防线同时归零的攻击。而它的防御成本，大概是十分钟。

## 攻击者怎么拿到你的域名

真实案例里，路径高度集中在这几条：

| 路径 | 具体做法 |
| --- | --- |
| **撞库** | 你在别处泄露的密码，拿来试注册商账号。**这是最常见的一条** |
| **邮箱沦陷** | 攻破你的注册邮箱 → 走「忘记密码」流程 → 接管账号 |
| **社工客服** | 伪造身份联系注册商人工客服，申请重置 |
| **域名过期** | 忘记续费，被抢注（这不需要任何技术） |
| **DNS 服务商账号** | 域名没丢，但 DNS 托管方的账号被打下来，照样能改解析 |

注意第二条和第五条：**你的域名安全，取决于注册邮箱的安全和 DNS 服务商账号的安全**。链条比想象的长。

<Callout type="warn">
  **最容易被忽略的是「域名过期」。** 它不是攻击，是运维失误，但后果一模一样——而且更难挽回，因为域名一旦被别人合法注册，你几乎要不回来。

  有价值的域名会被抢注机器人盯着，**过期当天就没了**。一定要开自动续费，并且确认**绑定的付款方式没过期**——信用卡到期导致自动续费失败是真实且常见的翻车方式。
</Callout>

## 五道锁，逐个上

### 一、账号本身

- **独立且随机的密码**，密码管理器生成，绝不与任何其它站点复用。
- **开二次验证，且尽量不用短信**。短信可被 SIM 卡劫持（补卡攻击）。优先级：硬件密钥（FIDO2）> TOTP 应用 > 短信。
- **注册邮箱单独用一个**，这个邮箱本身也要开 2FA，且不用它订阅任何东西——减少它出现在泄露库里的机会。

### 二、注册商锁（Registrar Lock）

也叫 `clientTransferProhibited`，防止域名被转移到别的注册商。**绝大多数注册商默认开启，但值得确认一次**：

```bash
whois example.com | grep -i "status"
```

你想看到这些状态：

```
Domain Status: clientTransferProhibited
Domain Status: clientUpdateProhibited
Domain Status: clientDeleteProhibited
```

三个都在，意味着**转移、修改、删除都需要先手动解锁**——攻击者即使登进了后台，也要多迈一道坎。

### 三、注册局锁（Registry Lock）

比注册商锁更硬的一档：`serverTransferProhibited` 系列，改动需要注册局层面的人工核验（通常是电话确认）。

- 需要单独申请，一般收费。
- 对个人博客过度；**对承载业务的核心域名值得**。
- 大公司的主域名基本都上了这一层。

### 四、DNSSEC

给 DNS 应答加数字签名，防止解析结果在传输途中被篡改。细节见[下一章](https://daiw.net/manual/web-security/dns-hardening)，这里只强调一点：**DNSSEC 防的是解析链路被投毒，防不了「攻击者登录你的后台合法地改了记录」**。两者要分清，别指望它替代账号安全。

### 五、变更告警

把「有人动了我的域名」变成一个能收到的通知：

- 注册商后台开启**变更邮件/短信通知**。
- 用外部服务监控 NS 与 A 记录变化。
- 自己写个定时检查也行：

```bash
#!/usr/bin/env bash
# 存一份基线，每天比对 NS 记录有没有变
EXPECTED="ns1.example-dns.com ns2.example-dns.com"
ACTUAL=$(dig +short NS example.com | sort | tr '\n' ' ' | xargs)
if [ "$ACTUAL" != "$EXPECTED" ]; then
  echo "⚠️ NS 记录变了：$ACTUAL"   # 这里接你的告警通道
fi
```

**为什么值得做**：域名劫持的黄金处置窗口是最初几小时。等到用户来问「你网站怎么跳到赌博页了」，损失已经造成——搜索引擎可能已经把你标红。

## 一个真实的失效模式：管理员邮箱指向自己的域名

这是个很隐蔽的循环依赖：

```
example.com 的注册商账号
   → 注册邮箱是 admin@example.com
      → 这个邮箱的 MX 记录在 example.com 的 DNS 里
```

一旦域名解析被改，**攻击者顺手把 MX 指向自己的邮件服务器，你的找回密码邮件直接落到他手上**。你连申诉的通道都被切断了。

<Callout type="info">
  **对策：注册邮箱一定要用另一个域名**，最好是主流邮件服务商的独立地址（并单独开 2FA）。这个建议看起来琐碎，但它切断的是一条会让你彻底失去控制权的依赖环。
</Callout>

## 10 分钟加固清单

逐条打勾：

- [ ] 注册商账号用独立随机密码
- [ ] 注册商账号开 2FA（优先硬件密钥 / TOTP，避免纯短信）
- [ ] **注册邮箱不在本域名下**，且它自己也开了 2FA
- [ ] `whois` 确认三个 `client*Prohibited` 状态都在
- [ ] 自动续费已开，且**付款方式未过期**
- [ ] 域名到期日已记进日历（不要只依赖自动续费）
- [ ] DNS 服务商账号同样开 2FA
- [ ] 开启域名变更通知，或配了 NS 记录监控
- [ ] 核心业务域名评估是否上注册局锁

## 小结

- 域名劫持是唯一能让全部技术防线一次性作废的攻击，且你的日志看不到。
- 最常见的入口是**撞库**和**注册邮箱沦陷**，不是什么高深手法。
- **域名过期**造成的后果与被劫持等同，且更难挽回。
- 注册邮箱绝对不要放在本域名下，那是一条会致命的循环依赖。

下一章讲 DNS 记录本身怎么加固。👉 [DNS 加固：DNSSEC 与 CAA](https://daiw.net/manual/web-security/dns-hardening)
