Post

受保护文章示例

这是一个带密码保护的文章示例

受保护文章示例

背景

这是一篇受密码保护的文章示例。只有知道密码的读者才能访问此内容。

核心原理

密码保护通过 Cloudflare Worker 在边缘层实现:

  1. 请求拦截: Cloudflare Worker 拦截所有对受保护文章的请求
  2. Cookie 验证: 检查用户是否已通过密码验证(通过 Cookie)
  3. 密码验证: 如果未验证,显示密码输入页面
  4. 内容代理: 验证通过后,从 GitHub Pages 代理原始内容

配置说明

1. 文章标记

在文章的 front matter 中添加 password: true

1
2
3
4
5
---
title: 我的文章
description: 文章描述
password: true  # 启用密码保护
---

2. Cloudflare Worker 配置

在 Cloudflare Dashboard 中配置环境变量:

变量名: PASSWORD_HASHES : JSON 格式的路径-哈希映射

1
2
3
{
  "/posts/protected-post-example/": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
}

3. 生成密码哈希

使用提供的工具生成密码哈希:

1
2
3
4
5
# 激活虚拟环境
source venv/bin/activate

# 生成哈希
python tools/generate_password_hash.py yourpassword

安全说明

  • 密码在客户端通过 SHA256 哈希后传输,不会明文传输
  • 验证通过后,通过 HttpOnly Cookie 保持登录状态
  • 静态文件仍然托管在 GitHub Pages,直接访问 GitHub 域名可以绕过保护
  • 此方案适合轻度保护,不适合高安全要求的敏感内容

总结

通过 Cloudflare Worker + 密码哈希的方式,可以方便地为 Jekyll 静态博客添加文章级别的密码保护功能。

This post is licensed under CC BY 4.0 by the author.