Skip to content

Repository files navigation

1eak.cool · 个人论坛小站

网站地址点击这里

1) 项目总览

基于 Cloudflare 全家桶(Pages + D1 + R2)构建的轻量级私人论坛。采用原生 HTML/JS/CSS 开发,无前端框架,单页应用(SPA)架构。

定位是私人小站,供自己和好友使用,功能以实用为主:发帖、评论、个人主页、媒体上传,后台有完整的管理面板。

2) 技术栈

  • 前端:原生 JavaScript (ES6+)、HTML5、CSS3(CSS Variables、Flexbox/Grid、动画)
  • 前端库:Marked.js(Markdown 渲染)、DOMPurify(XSS 防护)、Cloudflare Turnstile(人机验证)
  • 后端:Cloudflare Pages Functions(Edge 运行时)
  • 数据库:Cloudflare D1(SQLite)
  • 对象存储:Cloudflare R2(图片/视频)
  • 缓存/限流:Cloudflare KV
  • 鉴权:自研 Cookie Session + PBKDF2 密码哈希

3) 目录结构

/
├── login.html              # 登录 / 注册入口(含 Turnstile 动态开关)
├── index.html              # SPA 主容器(导航、所有视图模板)
├── style.css               # 全局样式(主题变量、评论楼中楼、响应式适配)
├── script.js               # 前端核心逻辑(路由、API 封装、渲染、交互)
└── functions/api/          # 后端 API(Cloudflare Pages Functions)
    ├── _middleware.js      # 全局限流(KV,180次/分钟)
    ├── admin.js            # 站点控制台接口(统计、反爬状态、公告、会话维护)
    ├── comments.js         # 评论 CRUD(楼中楼、置顶、级联删除)
    ├── config.js           # 公开系统配置(Turnstile 开关)
    ├── heartbeat.js        # 在线心跳上报
    ├── like.js             # 点赞 / 取消点赞
    ├── posts.js            # 帖子 CRUD(分类、搜索、排序、置顶)
    ├── profile.js          # 个人资料修改(昵称、签名、头像)
    ├── random_avatar.js    # 随机像素头像生成
    ├── upload.js           # R2 文件上传(白名单校验,最大 50MB)
    ├── user.js             # Session 校验 + 过期 Session 自动清理
    ├── user-public.js      # 公开用户信息查询
    └── auth/
        ├── login.js        # 登录(PBKDF2 校验、失败锁定、旧密码自动升级)
        ├── logout.js       # 登出(清除 Session)
        └── register.js     # 注册(字符白名单、PBKDF2 哈希)

4) 功能模块

帖子系统

  • 发帖支持 Markdown(含实时预览)、图片/视频上传
  • 分类:灌水 / 技术 / 生活 / 提问 / 公告
  • 心情标签:发帖时可选择心情(😊开心 / 😤吐槽 / 🤔思考 / 😴摸鱼 / 🔥热血 / 😢难过),显示在列表卡片和详情页标题旁
  • 阅读时间估算:根据内容字数自动计算,显示在卡片和详情页(中文按300字/分钟)
  • 列表视图:最新 / 热度 / 热议三种排序,支持分类筛选和全文搜索
  • 列表 / 网格双布局切换,返回列表自动恢复滚动位置

评论系统

  • 楼中楼:子评论缩进显示,紧跟父评论排列
  • 楼层号:根评论显示 #1 #2 #3 编号
  • 回复提示条:点击回复后顶部常驻显示"正在回复 @xxx"
  • 字数限制:前后端双重校验,最多 500 字
  • 代码块一键复制:hover 代码块时右上角出现复制按钮,复制成功后变绿显示"已复制 ✓"
  • 点赞、置顶、编辑、删除(删除父评论级联清除子评论)

用户系统

  • 注册:用户名字符白名单(中文/英文/数字/下划线/连字符)
  • 登录:失败5次锁定15分钟,旧 SHA-256 密码自动升级为 PBKDF2
  • 个人主页:头像、昵称、签名、帖子列表

站点控制台(仅管理员)

  • 实时统计:在线用户、今日活跃、注册总数、帖子/评论数、有效会话
  • 反爬状态:Turnstile 开关、登录失败计数、锁定账号列表
  • 内容维护:最近帖子、最近评论、在线用户、公告发布
  • 会话维护:清理 7 天前的过期 session

安全

  • 全局限流:KV 实现,180次/分钟/IP,TTL 自动过期
  • XSS 防护:DOMPurify 过滤所有 Markdown 输出
  • 文件上传:MIME 类型 + 扩展名双重白名单
  • Session 清理:每次用户请求时异步清理 7 天前的过期记录

5) 数据库表(D1)

表名 用途
users 用户信息、状态、封禁记录
sessions 登录会话(7天过期自动清理)
posts 帖子内容、分类、置顶状态
comments 评论、楼中楼关系(parent_id)
likes 点赞记录(帖子/评论)
system_settings 系统开关(如 Turnstile)

6) 开发规范

  • 命名:JS 变量 camelCase,数据库字段 snake_case
  • SQL:全部使用参数化查询(.bind()),禁止字符串拼接
  • 事务:涉及多表写操作使用 db.batch() 或顺序 await
  • 异步:不阻塞响应的后台任务使用 context.waitUntil()
  • API 返回:统一格式 { success: true, ... }{ success: false, error: "..." }
  • 前端交互:所有异步操作必须有 showToast 反馈
  • 移动端:新增复杂界面必须在 style.css 底部添加 @media (max-width: 768px)

7) 版本历史

  • v2.6.1(2026-07-26)安全加固与性能优化:CSRF 修复、统一会话鉴权与过期校验、上传移除 SVG、安全响应头;帖子列表瘦身、点赞原子化、新增 D1 索引
  • v2.6.0(2026-06-02)账号找回清理:登录页、设置页、后端接口和注册返回中移除旧找回凭据相关功能
  • v2.5.9(2026-06-02)首页更新公告改为每个用户只展示一次:首次进入首页提醒,之后仅在关于页查看完整更新日志
  • v2.5.8(2026-06-01)首页新增可见更新公告条:最新版本摘要直接展示,并链接到关于页完整更新日志
  • v2.5.7(2026-06-01)移动端修复:网格视图恢复双列、评论区支持粘贴图片上传、搜索/评论输入框避免 iOS 聚焦放大,并补强元信息渲染转义
  • v2.5.6(2026-05-31)管理面板升级为轻量站点控制台:反爬状态、登录异常、会话维护、最近评论和内容入口
  • v2.5.5(2026-05-31)更新日志重做为版本时间线:当前版本突出展示、近期版本卡片化、历史版本折叠收纳
  • v2.5.4(2026-05-31)移动端体验优化:首页筛选栏更紧凑、发帖页编辑/上传/发布区重排、评论输入与移动菜单交互优化、登录页小屏适配增强
  • v2.5.3(2026-05-31)发帖体验继续打磨:拖拽上传、上传失败自动重试、置顶评论分组展示、发布元数据检查脚本
  • v2.5.2(2026-05-31)编辑器体验优化:Markdown 占位文字自动选中、多图批量插入、发帖粘贴图片上传、评论多条置顶
  • v2.4.x(2026-05-11~12)创意功能:阅读时间估算、代码块一键复制、帖子心情标签、TOC目录、无障碍优化、视觉打磨
  • v2.3.x(2026-05-11)安全加固 + 交互体验优化 + 基础设施改进
  • v2.2.x(2026-05-11)Markdown 渲染、图片灯箱、管理面板完善
  • v2.1(2026-05-11)文件上传、灯箱、移动端适配
  • v2.0(2026-05-09)全面精简重构,去除赛博朋克风格,PBKDF2 密码哈希
  • v1.x(2024-2025)初始版本,含商城/背包/游戏等完整功能

About

myblog

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages