security: 会话可撤销与认证面加固
- users 加 token_version(schema v4):改密/登出递增,该用户全部已发 access/refresh 立即作废;refresh 改轮换式换发新 cookie - 邀请码改精确匹配 + 注册成功后消费(一码一用),修复子串匹配让任意后缀放行、可无限薅体验金 - 生产校验拦下 .env.example 占位密钥;OT_ENV 枚举校验(拼错不再静默跳过断言);生产强制 COOKIE_SECURE;非 development 拒绝默认密码播种管理员 - WebAuthn 会话启用过期校验 + 4096 容量上限(未认证 login/begin 可无限撑爆内存),begin/complete 挂登录级限速 - /api/v1 挂 1MB 请求体上限;login 先限 IP 桶再解析 body;全局安全响应头 + CSP - 连接池配置(PG 30/SQLite 8);SQLite DSN 自动追加 WAL + busy_timeout(驱动只认 _pragma,旧注释的 _journal_mode 写法不生效)
This commit is contained in:
1 parent
d6db0f8162
commit
e3ff0d3329
14 files changed
+392
-37
No files matched your search
+5
-3
@@ -1,7 +1,7 @@
|
||||
# openteam 服务配置示例 —— 复制为 .env 后修改
|
||||
# 所有项均可用环境变量 OT_<KEY> 覆盖(点号转下划线,如 db.driver → OT_DB_DRIVER)
|
||||
|
||||
# 运行环境 development | production
|
||||
# 运行环境 development | production(仅这两个值;生产启动会做密钥断言,见下)
|
||||
OT_ENV=development
|
||||
OT_PORT=8080
|
||||
|
||||
@@ -11,10 +11,11 @@ OT_DB_DSN=data/openteam.db
|
||||
# OT_DB_DRIVER=postgres
|
||||
# OT_DB_DSN=host=localhost user=openteam password=openteam dbname=openteam port=5432 sslmode=disable
|
||||
|
||||
# JWT(生产必须更换为随机长字符串)
|
||||
# JWT(生产必须更换为随机长字符串;OT_ENV=production 时本文件里的占位值会被启动校验拒绝)
|
||||
OT_JWT_SECRET=change-me-to-a-long-random-string
|
||||
OT_JWT_ACCESS_TTL=2h
|
||||
OT_JWT_REFRESH_TTL=168h
|
||||
# 生产必须为 true(refresh cookie 走 HTTPS;反代终止 TLS 时也要置 true)
|
||||
OT_JWT_COOKIE_SECURE=false
|
||||
|
||||
# 注册策略:open(开放)| invite(邀请码)
|
||||
@@ -68,7 +69,8 @@ OT_WEBAUTHN_RP_ID=localhost
|
||||
OT_WEBAUTHN_RP_ORIGIN=http://localhost:5173
|
||||
OT_WEBAUTHN_RP_NAME=openteam
|
||||
|
||||
# 初始管理员(仅首次创建生效)
|
||||
# 初始管理员(仅首次创建生效)。非 development 环境未显式设置 OT_ADMIN_PASSWORD
|
||||
# 时拒绝播种管理员;admin123 是公开默认值,生产启动校验也会拒绝它。
|
||||
OT_ADMIN_USERNAME=admin
|
||||
OT_ADMIN_EMAIL=admin@localhost
|
||||
OT_ADMIN_PASSWORD=admin123
|
||||
|
||||
Reference in new issue
Block a user