WHMCS 不只是一个”计费系统”。它装着客户的身份证、支付记录、工单往来,以及你所有服务器的开通凭据。
一旦它被打穿,攻击者拿到的不是”一个网站”,而是整个客户关系的控制权。
WHMCS 官方其实有一份加固清单(docs.whmcs.com/Further_Security_Steps),但它是按”功能文档”组织的,不好逐条核对。我把它整理成 12 项可执行的动作,你可以直接照着查。
1. 升级到最新的 LTS 版本
这是性价比最高的一条。
WHMCS 只在当前 LTS 版本上发布安全补丁。如果你 12 个月以上没升级,那你的站点里几乎一定有已被公开的、可被直接利用的漏洞。
升级前:备份文件 + 数据库、确认模块兼容、确认 PHP 版本支持、在测试环境先跑一遍。
2. 加固 configuration.php
这个文件里有你的加密密钥、数据库账号、授权信息。它一旦泄露,攻击者可以解密数据库里所有已保存的支付凭据和密码。
三层防护,按顺序做:
chmod 400 configuration.php # 只允许属主读取
# 或者:把它移出网站根目录,用中转文件引用
chattr +i configuration.php # 加不可变标志,连 root 都改不了(解除用 chattr -i)
3. 重命名 admin 目录
WHMCS 默认后台路径就是 /admin,全网扫描器都在扫这个路径。
// 改完目录名后,在 configuration.php 里同步:
$customadminpath = '你的新目录名';
这属于”隐藏”而非”防护”,但能把绝大多数自动化爆破直接挡在门外。
4. 给 admin 目录加 IP 白名单
如果团队有固定办公 IP 或固定出口的 VPN,直接在 Web 服务器层限制:
location /你的后台目录 {
allow 203.0.113.5;
allow 198.51.100.0/24;
deny all;
}
这样即便有人找到了你的后台路径,也得先拿下你的办公 IP。
5. 全站强制 HTTPS + HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains
HTTPS 在 2026 年不是可选项。配置里要保证所有 HTTP 请求 301 到 HTTPS,并且证书到期前自动续期(Let’s Encrypt 可以自动化)。HSTS 要在 HTTPS 完全稳定之后再开。
6. 把可写目录移出网站根目录
attachments/、templates_c/、downloads/ 这类可写目录是上传漏洞的重灾区。
把它们移到 Web 根目录之外的非公开位置,再同步修改文件存储设置和模板缓存路径。WHMCS 官方有专门的文档说明这一步。
7. 把 crons 目录移出网站根目录
crons/ 目录同样不应该能被直接 web 访问。移到 web root 之上的私有目录即可。
8. 数据库权限最小化
只给 WHMCS 日常运行必需的那几个权限。安装、升级、模块激活时才需要临时提权。
不要图省事给数据库账号 ALL PRIVILEGES——那等于把数据库的钥匙和保险箱一起放在门口。
9. 禁止直接访问 vendor 目录
vendor/ 里是一堆第三方库,不应该被直接当静态文件请求。
- 用 Apache:自带的
.htaccess已处理; - 用 Nginx:必须手动加规则禁止访问该目录。
用 Nginx 又没配这条,是个很常见的疏漏。
10. 防点击劫持(CSP)
确保站点始终发送正确的 CSP frame-ancestors
响应头,避免你的客户区被外部页面 iframe 套住做钓鱼。
Content-Security-Policy: frame-ancestors 'self'
11. 员工账户:2FA + 独立账号 + 最小权限
后台是整个系统的钥匙串,这里必须严:
- 所有管理员强制开启两步验证(2FA);
- 一人一号,绝不共用账号(否则出了问题无法追责);
- 按角色分配权限,客服不需要有”服务器管理”权限。
12. 防垃圾注册与社工攻击
攻击者先从”注册一个账号”开始。几条立刻能生效的措施:
- 禁止用你公司自己域名的邮箱注册客户账号(防冒充内部人员的社工);
- 开启邮箱验证,确认客户邮箱真实可达;
- 开启 reCAPTCHA v3 或 hCaptcha,挡住批量机器人下单;
- 配置风险评分与订单人工复核,可疑订单先审后开。
附:一张自检表
| # | 项目 | 状态 |
|---|---|---|
| 1 | WHMCS 为最新 LTS | ☐ |
| 2 | configuration.php 已加固(400 / 移出 / 不可变) | ☐ |
| 3 | admin 目录已改名 | ☐ |
| 4 | admin 目录有 IP 白名单 | ☐ |
| 5 | 全站 HTTPS + HSTS | ☐ |
| 6 | 可写目录已移出 web root | ☐ |
| 7 | crons 目录已移出 web root | ☐ |
| 8 | 数据库权限已最小化 | ☐ |
| 9 | vendor 目录禁止直接访问 | ☐ |
| 10 | 已发送 CSP frame-ancestors | ☐ |
| 11 | 员工 2FA / 独立账号 / 最小权限 | ☐ |
| 12 | 邮箱验证 + 验证码 + 欺诈防护 | ☐ |
12 项全绿,才算”基本安全”。 任何一项是红的,都是一个已经敞开的口子。