文件
wangchuanli 45f6f08195 fix(server): 修复 IP 封锁绕过漏洞并补充审计日志
- 支持 TRUST_PROXY 配置,由 express 正确解析客户端 IP,防止伪造 X-Forwarded-For
- 修复 IP 封锁使用对象作为 Map key 导致失效的问题,改用字符串 IP
- 主密码解锁失败时记录 IP 失败次数,达到阈值后封锁
- 补充条目更新操作的审计日志
2026-08-26 11:09:47 +08:00

41 行
1.8 KiB
Bash

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 复制为 .env 或直接写在 docker-compose 的 environment 中
# 敏感值(口令固定串、SESSION_SECRET)建议用环境变量注入,不要写死进 config.js
# APP 门户口令:dynamic=当天日期+固定串,static=固定口令
APP_PW_MODE=dynamic
APP_PW_DATE_FMT=yyyymmdd
APP_PW_DATE_POS=prefix
APP_PW_DYNAMIC=你的固定部分
APP_PW_STATIC=改成你的强口令
# 密码库 / 密钥文件路径(容器内)
KDBX_PATH=/app/vault/vault.kdbx
KEYFILE_PATH=/app/vault/vault.key
# 权限:false=只读(默认),true=可编辑(需把 compose 里 vault 挂载改 :rw)
WRITABLE=false
# 会话
SESSION_SECRET=改成随机长字符串
SESSION_MAX_AGE=1800000
# 反向代理层数/地址(如 "1" 或前端 Nginx 的 "10.0.0.0/8")。部署在 Nginx/Caddy 后必须设置,
# 否则攻击者可用伪造的 X-Forwarded-For 绕过 IP 封锁。直连部署留空。
TRUST_PROXY=
# 审计日志:本地文件持久化目录(按大小自动切分,默认 ./logs)
LOG_DIR=logs
# 审计日志单文件切分阈值:日志文件达到该体积后滚动切分为 audit.1.log / audit.2.log ...
# 支持单位 K/M/G(不写单位按字节)。默认 5M(即 5242880 字节)
AUDIT_FILE_MAX=100M
# 审计日志切分文件最多保留份数(audit.1.log ~ audit.N.log,超出最旧的被删除)。默认 10
AUDIT_FILE_KEEP=10
# HTTPS(安全前置要求):提供证书后自动以 HTTPS 启动,并把 HTTP 重定向到 HTTPS
# 未提供证书时,系统会自动生成一份自签证书(默认写入 SSL_KEY/SSL_CERT 路径)并启用 HTTPS
# - 本地:直接 node gen-cert.js 可预生成;docker 场景下 compose 已挂载 ./ssl 持久化证书
# - 生产环境请替换为受信任 CA 签发的证书
SSL_KEY=ssl/key.pem
SSL_CERT=ssl/cert.pem
PORT=3000