TL;DR
静态博客攻击面比动态站点小得多,但仍需防御:恶意爬虫刷流量、评论区 XSS 和垃圾内容、DNS 劫持、CDN 绕过。本文从边界防御、应用层安全、监控告警三层给出可操作配置。
边界层:DNS 和 CDN 配置
1. 启用 DNSSEC
Cloudflare Dashboard -> DNS -> Settings -> Enable DNSSEC
2. Cloudflare WAF 基础配置
- OWASP Core Ruleset: ON — SQLi、XSS、LFI 等 OWASP Top 10
- Cloudflare Managed Ruleset: ON — 已知漏洞利用
- Exposed Credentials Check: ON — 泄漏的密码检测
- Anonymous IP Threats: BLOCK — VPN/TOR 节点
3. SSL/TLS 配置
- SSL/TLS encryption mode: Full (strict)
- Minimum TLS version: 1.3
- Always Use HTTPS: ON
4. IP 访问限制(Rate Limiting)
同一 IP 每分钟最多请求 100 次,超过后返回 429,阻止 10 分钟。
应用层:评论系统安全
1. 评论区 XSS 防御
使用成熟评论系统框架(Giscus 基于 GitHub Discussions,不会直接注入页面 DOM)。 如果使用 Twikoo 或自建方案,必须执行 HTML 转义:
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
2. CSRF 防御
fetch('/api/comment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Origin': 'https://blog.yourdomain.com',
},
body: JSON.stringify(comment)
});
3. 评论内容过滤
| 风险类型 | 检测方式 | 处理方式 |
|---|---|---|
| 垃圾链接 | URL 数量检测(>2 条标记) | 标记为待审核 |
| 恶意代码 | script 标签 | 禁止提交 |
| 人身攻击 | 关键词过滤 | 标记为待审核 |
| 重复内容 | 相同内容 24 小时内 | 自动隐藏 |
爬虫防御
1. robots.txt 配置
User-agent: *
Allow: /
Disallow: /api/
Disallow: /admin/
Crawl-Delay: 10
Sitemap: https://blog.yourdomain.com/sitemap.xml
2. Cloudflare 爬虫管理
Security -> Bot Fight Mode: ON
3. JS Challenge
Cloudflare 给浏览器发送 JavaScript 计算题,爬虫通常不执行 JS,会阻挡。
静态博客特有风险
1. 构建日志泄漏
不要在日志中输出敏感信息:
# 错误
echo "Deploying with password $SSH_PASSWORD"
# 正确
echo "Deploying using configured secrets"
2. .git 目录暴露
location ~ /\.git {
deny all;
return 404;
}
监控与告警
- HTTP DDoS Attack: ON
- Advanced DDoS Attack: ON
- Traffic Anomaly: ON(流量突增 300% 以上)
journalctl -u sshd | grep "Failed password"
安全检查清单
部署前检查
- DNSSEC 已启用
- HTTPS 强制跳转(TLS 1.3)
- Cloudflare WAF 启用(至少 OWASP + Managed Rules)
- robots.txt 禁止敏感路径
- .git 目录不可访问
- CI-CD 密钥使用 Secret 存储
每周检查
- 检查日志中是否有异常请求模式
- 验证 CDN 缓存命中率(低于 85% 说明配置有问题)
- 检查评论系统垃圾内容
写在
静态博客安全不是复杂问题。三层防御就够:边界层阻止大部分攻击,应用层过滤残留威胁,监控层感知异常。花 30 分钟做一次安全核查,能避免 99% 的常见攻击。
COMMENTS
种下你的想法
在花园里留下一条评论,和这篇文章一起生长。