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, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}

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