这个博客是怎么写出来的
为什么不用现成的
静态站的生成器、各种 CMS 我都不太想用:这台机器上我只想装一个 Python,跑一个文件。
所以这个东西只用标准库:
| 模块 | 用途 |
| --- | --- |
| http.server | HTTP 服务 |
| sqlite3 | 文章、用户、会话 |
| hashlib / hmac | PBKDF2 口令哈希、CSRF 定长比较 |
| secrets | 会话令牌、随机盐 |
权限分四档
- 匿名:只能读文章
- 注册用户:能下载「普通文件」
- 白名单用户:额外能下载「白名单文件」——普通用户连这个分类都看不见
- 管理员:后台 + 「仅管理员文件」
权限不是写在数据库里的,而是由文件放在哪个文件夹决定:
下载/普通/ → 登录即可下载
下载/白名单/ → 只有白名单用户看得见
下载/仅管理员/ → 只有管理员看得见
安全上做了什么
- 口令 PBKDF2-HMAC-SHA256,20 万轮 + 每用户随机盐,从不存明文
- 会话令牌只存摘要,Cookie 是
HttpOnly+SameSite=Lax(HTTPS 下自动加Secure) - 所有写操作校验 CSRF 令牌
- 登录失败按 IP + 用户名限流
- 下载路径做规范化校验,拒绝
../穿越和隐藏文件 - Markdown 渲染先转义 HTML,不支持裸 HTML,避免 XSS