Compare commits

3 Commits

Author SHA1 Message Date
d46d20f670 chore: 移除系统设置的密码二次验证
移除 /api/admin/settings 路由的 requirePasswordConfirmation 中间件,
简化管理员操作流程。系统设置更新现在仅依赖管理员登录认证。

注意:此修改降低了安全性,建议在生产环境中考虑其他安全措施。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:58:39 +08:00
e5e2bfd9db fix: 部署脚本添加 ENCRYPTION_KEY 和 ENABLE_CSRF 配置
修复问题:
1. 新安装时自动生成 ENCRYPTION_KEY(用于加密 OSS 敏感信息)
2. 新安装时默认启用 CSRF 保护(ENABLE_CSRF=true)
3. 升级时自动检查并补充缺失的 ENCRYPTION_KEY 和 ENABLE_CSRF

解决了部署后服务因缺少 ENCRYPTION_KEY 而无法启动的问题。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:50:25 +08:00
Dev Team
355c5940d4 fix: 隐藏系统级统一OSS用户的OSS配置按钮
## 问题
用户权限为 oss_only 时仍显示"配置/修改OSS"按钮,但用户使用的是系统级统一OSS配置,
不需要也无法修改个人OSS配置。

## 修复
- app.html:1894 - 添加条件判断 `v-if="user?.has_oss_config"`
- 仅在用户有个人OSS配置时显示"修改个人OSS配置"按钮
- 修改按钮文本:"配置/修改OSS" → "修改个人OSS配置"
- 修改说明文本:"已配置云服务" → "已配置系统级OSS"

## 影响
-  系统级统一OSS用户不再看到误导性的配置按钮
-  有个人OSS配置的用户仍可以修改个人配置
-  提升用户体验,避免混淆

**Bug数量:** 1个UI问题
**修改文件:** 1个
2026-01-20 22:52:09 +08:00
3 changed files with 35 additions and 4 deletions

View File

@@ -4555,10 +4555,10 @@ app.get('/api/admin/settings', authMiddleware, adminMiddleware, (req, res) => {
}); });
// 更新系统设置 // 更新系统设置
// 注意:已移除 requirePasswordConfirmation 中间件,依赖管理员登录认证
app.post('/api/admin/settings', app.post('/api/admin/settings',
authMiddleware, authMiddleware,
adminMiddleware, adminMiddleware,
requirePasswordConfirmation, // 安全修复:添加密码二次验证(系统设置影响全局)
(req, res) => { (req, res) => {
try { try {
const { max_upload_size, smtp, global_theme } = req.body; const { max_upload_size, smtp, global_theme } = req.body;

View File

@@ -1887,11 +1887,12 @@
仅 OSS 模式 仅 OSS 模式
</div> </div>
<div style="color: var(--text-secondary); font-size: 13px; margin-top: 6px;"> <div style="color: var(--text-secondary); font-size: 13px; margin-top: 6px;">
{{ user?.oss_config_source !== 'none' ? '已配置云服务,可正常使用 OSS 存储。' : '还未配置 OSS请先填写配置信息。' }} {{ user?.oss_config_source !== 'none' ? '已配置系统级 OSS,可正常使用 OSS 存储。' : '还未配置 OSS请先填写配置信息。' }}
</div> </div>
</div> </div>
<button class="btn btn-primary" @click="openOssConfigModal()" style="border-radius: 10px;"> <!-- 仅在用户有个人OSS配置时显示修改按钮 -->
<i class="fas fa-tools"></i> 配置 / 修改 OSS <button v-if="user?.has_oss_config" class="btn btn-primary" @click="openOssConfigModal()" style="border-radius: 10px;">
<i class="fas fa-tools"></i> 修改个人 OSS 配置
</button> </button>
</div> </div>

View File

@@ -2114,6 +2114,9 @@ create_env_file() {
# 生成随机Session密钥 # 生成随机Session密钥
SESSION_SECRET=$(openssl rand -hex 32) SESSION_SECRET=$(openssl rand -hex 32)
# 生成随机加密密钥用于加密OSS等敏感信息
ENCRYPTION_KEY=$(openssl rand -hex 32)
# ========== CORS 安全配置自动生成 ========== # ========== CORS 安全配置自动生成 ==========
# 根据部署模式自动配置 ALLOWED_ORIGINS 和 COOKIE_SECURE # 根据部署模式自动配置 ALLOWED_ORIGINS 和 COOKIE_SECURE
@@ -2162,6 +2165,10 @@ JWT_SECRET=${JWT_SECRET}
# Session密钥用于会话管理 # Session密钥用于会话管理
SESSION_SECRET=${SESSION_SECRET} SESSION_SECRET=${SESSION_SECRET}
# 加密密钥用于加密OSS Access Key Secret等敏感信息
# 重要:此密钥必须配置,否则服务无法启动
ENCRYPTION_KEY=${ENCRYPTION_KEY}
# 数据库路径 # 数据库路径
DATABASE_PATH=./data/database.db DATABASE_PATH=./data/database.db
@@ -2199,6 +2206,10 @@ TRUST_PROXY=1
# 公开端口nginx监听的端口用于生成分享链接 # 公开端口nginx监听的端口用于生成分享链接
# 如果使用标准端口(80/443)或未配置,分享链接将不包含端口号 # 如果使用标准端口(80/443)或未配置,分享链接将不包含端口号
PUBLIC_PORT=${HTTP_PORT} PUBLIC_PORT=${HTTP_PORT}
# CSRF 保护(生产环境强烈建议开启)
# 使用 Double Submit Cookie 模式防止跨站请求伪造攻击
ENABLE_CSRF=true
EOF EOF
print_success "配置文件创建完成" print_success "配置文件创建完成"
@@ -3728,6 +3739,25 @@ update_patch_env() {
else else
print_info ".env 已包含 SESSION_SECRET保持不变" print_info ".env 已包含 SESSION_SECRET保持不变"
fi fi
# 检查 ENCRYPTION_KEY加密密钥用于加密OSS等敏感信息必需
if ! grep -q "^ENCRYPTION_KEY=" "${PROJECT_DIR}/backend/.env"; then
# 自动生成随机加密密钥
NEW_ENCRYPTION_KEY=$(openssl rand -hex 32)
echo "ENCRYPTION_KEY=${NEW_ENCRYPTION_KEY}" >> "${PROJECT_DIR}/backend/.env"
print_warning "已为现有 .env 补充 ENCRYPTION_KEY已自动生成安全密钥"
print_info "此密钥用于加密 OSS Access Key Secret 等敏感信息"
else
print_info ".env 已包含 ENCRYPTION_KEY保持不变"
fi
# 检查 ENABLE_CSRFCSRF 保护,生产环境强烈建议开启)
if ! grep -q "^ENABLE_CSRF=" "${PROJECT_DIR}/backend/.env"; then
echo "ENABLE_CSRF=true" >> "${PROJECT_DIR}/backend/.env"
print_warning "已为现有 .env 补充 ENABLE_CSRF=trueCSRF保护已启用"
else
print_info ".env 已包含 ENABLE_CSRF保持不变"
fi
else else
print_warning "未找到 ${PROJECT_DIR}/backend/.env请手动确认配置" print_warning "未找到 ${PROJECT_DIR}/backend/.env请手动确认配置"
fi fi