后端基础层:模块定义、配置解析、SQLite 存储层、Argon2id 认证与 Markdown 渲染
- internal/config:serve/init/backup/gc 子命令参数解析(--dev 强制 loopback 守卫) - internal/store:user_version 版本化迁移(仅追加式 + 越界拒启 + --allow-newer)、 笔记/图片/引用/会话/设置 DAO、并集可见性查询、VACUUM INTO 在线备份、 回收站 30 天 + 孤儿图 7 天宽限 gc - internal/auth:Argon2id PHC 串(m=19456,t=2,p=1)、256bit token 与 SHA-256 摘要 - internal/markdown:goldmark(默认转义)+ bluemonday 双保险,摘要纯文本提取 - internal/middleware:安全头(CSP/HSTS/nosniff 等)、错误日志、 有界令牌桶限流(per-IP 桶上限 + TTL 逐出)、Origin/Referer 同源校验
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
package config
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestDevLoopbackGuard(t *testing.T) {
|
||||
// --dev 强制 loopback(§7.3-8)
|
||||
if _, err := ParseServe([]string{"--dev", "--addr", ":8080"}); err == nil {
|
||||
t.Error("--dev + 0.0.0.0 应拒绝启动")
|
||||
}
|
||||
if _, err := ParseServe([]string{"--dev", "--addr", "192.168.1.5:8080"}); err == nil {
|
||||
t.Error("--dev + 局域网地址应拒绝启动")
|
||||
}
|
||||
if _, err := ParseServe([]string{"--dev", "--addr", "127.0.0.1:8080"}); err != nil {
|
||||
t.Errorf("--dev + 127.0.0.1 应允许: %v", err)
|
||||
}
|
||||
if _, err := ParseServe([]string{"--dev", "--addr", "localhost:8080"}); err != nil {
|
||||
t.Errorf("--dev + localhost 应允许: %v", err)
|
||||
}
|
||||
// 非 dev 不限制
|
||||
if _, err := ParseServe([]string{"--addr", ":8080"}); err != nil {
|
||||
t.Errorf("非 dev 任意地址应允许: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user