1.
概述:为何关注以 cdn 开头的域名
说明:很多站点把静态资源放在 cdn.example.com;这类域名一旦配置错误或被滥用会带来缓存投毒、源站泄露和证书/混合内容风险。小分段:风险源自错误CORS、公开的 Origin、缺失SRI/CSP。
2.
风险一:缓存投毒与内容篡改
说明:攻击者可通过可控的请求或错误的缓存策略让恶意 JS 被缓存并下发。操作检测:使用 curl 模拟多种请求头检查缓存差异。示例命令:curl -vk -H "User-Agent:test1" https://cdn.example.com/app.js -I;再换头比较 ETag/Cache-Control。
3.
风险二:源站(Origin)暴露与被直接访问
说明:若 origin IP 或域名被暴露,攻击者可绕过 CDN 发起攻击或盗用资源。检测步骤:1) 使用 dig/host 查找 cdn 域名的 CNAME:dig +short cdn.example.com CNAME;2) 跟踪 CNAME 到源,尝试直接访问源域名或 IP:curl -I http://
。
4.
风险三:TLS/证书与混合内容问题
说明:不正确的证书或不强制 HTTPS 会导致中间人。检测:openssl s_client -connect cdn.example.com:443 -servername cdn.example.com 2>/dev/null | openssl x509 -noout -subject -dates。确认证书链与有效期。
5.
实操检测清单(一步步)
说明与步骤:
- 检查 DNS/CNAME:dig +short cdn.example.com CNAME
- 检查 TLS:openssl s_client -connect cdn.example.com:443 -servername cdn.example.com
- 检查缓存响应头:curl -I https://cdn.example.com/file.js
- 检查 CORS:curl -I -H "Origin: https://evil.com" https://cdn.example.com/api
每步记录响应中的头部(Access-Control-Allow-Origin、Cache-Control、ETag、CF-Cache-Status 等)。
6.
防护建议:配置与操作(逐条可落地)
操作步骤:
- 强制 HTTPS:在 CDN 面板启用 “Always Use HTTPS” 或在源配置 301 重定向到 HTTPS。
- 限制 Origin 访问:在源服务器防火墙只允许 CDN IP 段访问(示例 iptables/云防火墙规则),Cloudflare 提供 IP 列表,定期同步。
- 使用 Origin Pull 验证:开启 CDN 的 Origin Pull Certificate(或在源端校验特定客户端证书)。
- 配置正确的 Cache-Control 和 Vary:静态资源长缓存,动态接口禁止缓存(Cache-Control: no-store, no-cache, private)。
7.
防护建议:前端与传输层
操作步骤:
- 启用 SRI(Subresource Integrity)对第三方脚本:生成 SRI:openssl dgst -sha384 -binary file.js | openssl base64 -A,然后在页面引用:<script src="..." integrity="sha384-..." crossorigin="anonymous">
- 配置 CSP:在响应头加入 Content-Security-Policy,限制脚本源和报告 URI。
- 禁用 URL 中的敏感令牌,使用短期签名或 HTTP header 传递授权。
8.
应急与清理操作步骤
操作步骤:
- 发现被投毒后立即清缓存:示例 Cloudflare API:curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type:application/json" --data '{"purge_everything":true}'
- 旋转密钥/令牌并更改任何公开的签名 URL 规则。
- 检查日志回溯源 IP 与时间点,抓取恶意文件样本用于取证。
9.
监控与自动化建议
操作步骤:
- 定期自动化检查:用脚本每天执行 dig、openssl、curl 检查并报警(示例 crontab 调用 shell 脚本)。
- 部署 WAF 与 RASP:在 CDN 层启用 WAF 规则,阻挡常见注入/爬虫模式。
- 日志集中与告警:把 CDN 日志导入 SIEM,设置异常流量与 4xx/5xx 告警。
10.
问:如何快速判断 cdn 域名是否泄露源站?
答:检测步骤(可复制执行):1) dig cdn.example.com 看 CNAME;2) 对返回的 CNAME 或 A 记录做反向追踪;3) 用 curl 模拟 Host 头访问可能的源:curl -I -H "Host: origin.example.com" http://。若返回正常页面则源站可能未受限。
11.
问:被缓存投毒后如何最小化影响?
答:立即清空 CDN 缓存(按文件或全部),阻断对源的直接访问(用防火墙限制),更换或撤销被引用的 JS,并在页面上用 SRI 与 CSP 防护未来注入;同时通知用户并恢复备份版本。
12.
问:有哪些常用命令用于日常检测?
答:常用命令列表:dig +short cdn.example.com CNAME;openssl s_client -connect cdn.example.com:443 -servername cdn.example.com;curl -I -H "Origin:https://evil.com" https://cdn.example.com/file.js;openssl dgst -sha384 -binary file.js | openssl base64 -A(生成 SRI)。定期把这些命令纳入巡检脚本。