Files

56 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 内容限制与隔离边界
[返回项目首页](../README.md)
## 文件白名单
- 仅允许根目录 `index.toml`(唯一允许的 TOML 文件) 和 `posts/<目录>/<文件>` 内的 `.txt/.md/.markdown/.png/.jpg/.jpeg/.webp` 普通文件;扩展名使用小写。
- 拒绝证书扩展名、隐藏文件、`.gitignore`、脚本、配置、符号链接、可执行位、子模块和其他类型。
- 文本中的 PEM 证书/密钥标记也会拒绝。
- Git 接收层能直接拦截,因此非白名单内容使整次推送失败,不静默改变作者提交。
## 容量配额
- 根索引上限 64 KiB,每个文本文件上限 256 KiB;图片单张 2 MiB、每目录最多 12 张、尺寸 4096×4096;每个目录合计 6 MiB。
- 每位作者最多 1000 个目录、14001 个文件、原始文件合计 64 MiB;全站导入快照另限 64 MiB、1000 篇,超出时等待管理员处理。
## Git 接收限额
- Git 输入 pack 上限 8 MiB;全部作者接收仓库合计达到 256 MiB 后拒绝新 SSH 会话,需要管理员离线维护。
- 此阈值是应用检查,生产还应为 Docker 数据盘配置真实文件系统配额。
## 正文解析
- 同一文章的相对链接仅可引用同目录已验证的文本或图片,禁止跨目录读取;只有从入口可达的最多 64 个页面、页面图片和封面可被导入。
- 使用成熟 Markdown 解析器,拒绝原始 HTML、危险链接协议、外链图片、控制符和双向隐藏字符;代码块是惰性文本,绝不执行 MDX、JS、仓库脚本、构建任务或上传内容。
## SSH 命令与密钥
- 支持 Ed25519 和 2048–8192 位 RSA 公钥,拒绝弱密钥、负数/畸形 RSA 参数及额外二进制数据;拒绝把 `authorized_keys` 选项当作公钥上传。
- SSH 只接受精确的 `git-receive-pack 'content.git'` / `git-upload-pack 'content.git'`,没有 shell、SCP/SFTP、TTY、转发、隧道、用户环境变量。
## 进程与存储隔离
- 接收仓库由 UID 10002 管理;API 为独立 UID 10001,正式仓库/用户密码文件不挂载给 SSH 容器;SSH 只读授权文件和只读固定 hook。
- 接收内容再次验证后才导入 API 自己的按作者隔离的 Git 缓存与阅读快照。
## HTTP 与账户限额
- HTTP 请求体 8 KiB;注册/登录合计全局 10 次/分钟,修改操作全局 60 次/分钟;密码哈希并发最多 2。
- 1000 用户、1000 个有效会话上限,一小时固定会话期限。
- 全局限制偏保守,后续可细化 IP/账户限制以改善公平性。
## 统计与隐私
- 统计不收集 IP/访客身份:公开文章数、标签数、Markdown 字节数、启动以来文章 API 请求数。
- 请求数不是独立访客数,重启后清零。
## 前端接入
- 服务器只返回 JSON Markdown 与图片;后续前端必须把元数据当文本输出,并继续禁用原始 HTML、MDX和危险链接,不能将接口字段直接作为 HTML 执行。
- 隔离不能替代 Git/OpenSSH/解码库的持续安全更新。
## 索引暂存与生效版本
TOML 的语法或元信息错误只更新作者接收仓库中的暂存提交,不替换现有文章或时间记录。文件类型、模式、配额和正文安全检查仍会执行,不能通过破坏 TOML 绕过检查。有效索引中的入口不存在时,该文章不再生效。非公开文章的所有页面和资源均返回 404,防止绕过入口直读。