仁词のWeb|大肥鱼入侵

这个博客是怎么写出来的

2026-10-14 23:15·6 次阅读折腾Python

为什么不用现成的

静态站的生成器、各种 CMS 我都不太想用:这台机器上我只想装一个 Python,跑一个文件。

所以这个东西只用标准库:

| 模块 | 用途 |

| --- | --- |

| http.server | HTTP 服务 |

| sqlite3 | 文章、用户、会话 |

| hashlib / hmac | PBKDF2 口令哈希、CSRF 定长比较 |

| secrets | 会话令牌、随机盐 |

权限分四档

  1. 匿名:只能读文章
  2. 注册用户:能下载「普通文件」
  3. 白名单用户:额外能下载「白名单文件」——普通用户连这个分类都看不见
  4. 管理员:后台 + 「仅管理员文件」

权限不是写在数据库里的,而是由文件放在哪个文件夹决定:


下载/普通/        → 登录即可下载
下载/白名单/      → 只有白名单用户看得见
下载/仅管理员/    → 只有管理员看得见

安全上做了什么

  • 口令 PBKDF2-HMAC-SHA256,20 万轮 + 每用户随机盐,从不存明文
  • 会话令牌只存摘要,Cookie 是 HttpOnly + SameSite=Lax(HTTPS 下自动加 Secure)
  • 所有写操作校验 CSRF 令牌
  • 登录失败按 IP + 用户名限流
  • 下载路径做规范化校验,拒绝 ../ 穿越和隐藏文件
  • Markdown 渲染先转义 HTML,不支持裸 HTML,避免 XSS

← 返回首页