From e5e2bfd9dbb78a1e3c0b550479df756d7d38a961 Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Wed, 21 Jan 2026 11:50:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=83=A8=E7=BD=B2=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20ENCRYPTION=5FKEY=20=E5=92=8C=20ENABLE=5FCS?= =?UTF-8?q?RF=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复问题: 1. 新安装时自动生成 ENCRYPTION_KEY(用于加密 OSS 敏感信息) 2. 新安装时默认启用 CSRF 保护(ENABLE_CSRF=true) 3. 升级时自动检查并补充缺失的 ENCRYPTION_KEY 和 ENABLE_CSRF 解决了部署后服务因缺少 ENCRYPTION_KEY 而无法启动的问题。 Co-Authored-By: Claude Opus 4.5 --- install.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/install.sh b/install.sh index 67f7f3a..3ceaa21 100644 --- a/install.sh +++ b/install.sh @@ -2114,6 +2114,9 @@ create_env_file() { # 生成随机Session密钥 SESSION_SECRET=$(openssl rand -hex 32) + # 生成随机加密密钥(用于加密OSS等敏感信息) + ENCRYPTION_KEY=$(openssl rand -hex 32) + # ========== CORS 安全配置自动生成 ========== # 根据部署模式自动配置 ALLOWED_ORIGINS 和 COOKIE_SECURE @@ -2162,6 +2165,10 @@ JWT_SECRET=${JWT_SECRET} # Session密钥(用于会话管理) SESSION_SECRET=${SESSION_SECRET} +# 加密密钥(用于加密OSS Access Key Secret等敏感信息) +# 重要:此密钥必须配置,否则服务无法启动 +ENCRYPTION_KEY=${ENCRYPTION_KEY} + # 数据库路径 DATABASE_PATH=./data/database.db @@ -2199,6 +2206,10 @@ TRUST_PROXY=1 # 公开端口(nginx监听的端口,用于生成分享链接) # 如果使用标准端口(80/443)或未配置,分享链接将不包含端口号 PUBLIC_PORT=${HTTP_PORT} + +# CSRF 保护(生产环境强烈建议开启) +# 使用 Double Submit Cookie 模式防止跨站请求伪造攻击 +ENABLE_CSRF=true EOF print_success "配置文件创建完成" @@ -3728,6 +3739,25 @@ update_patch_env() { else print_info ".env 已包含 SESSION_SECRET,保持不变" 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_CSRF(CSRF 保护,生产环境强烈建议开启) + if ! grep -q "^ENABLE_CSRF=" "${PROJECT_DIR}/backend/.env"; then + echo "ENABLE_CSRF=true" >> "${PROJECT_DIR}/backend/.env" + print_warning "已为现有 .env 补充 ENABLE_CSRF=true(CSRF保护已启用)" + else + print_info ".env 已包含 ENABLE_CSRF,保持不变" + fi else print_warning "未找到 ${PROJECT_DIR}/backend/.env,请手动确认配置" fi