feat: 修复CORS安全漏洞 + 升级主页设计
🔒 安全修复: - 修复分享链接HTTP/HTTPS协议识别问题 - 自动配置CORS安全策略(根据部署模式) - 自动配置Cookie安全设置(HTTPS环境) - 移除不安全的默认CORS配置 ✨ 功能改进: - install.sh: 升级create_env_file()函数,智能配置CORS * 域名+HTTPS模式: ALLOWED_ORIGINS=https://domain * 域名+HTTP模式: ALLOWED_ORIGINS=http://domain * IP模式: 留空并显示安全警告 - backend/server.js: 添加getProtocol()函数,正确识别HTTPS - backend/.env.example: 完全重写,添加详细的CORS配置说明 🎨 主页升级: - frontend/index.html: 全新现代化设计 * 渐变背景+动画效果 * 9大功能特性展示 * 8项技术栈展示 * 完美响应式支持 📝 修改文件: - backend/server.js (第63-83行, 1255行, 1282行) - install.sh (第2108-2195行) - backend/.env.example (完全重写) - frontend/index.html (完全重写) 🔗 相关问题: - 修复CORS允许任意域名访问的安全漏洞 - 修复分享链接使用HTTP的问题 - 解决Cookie在HTTP环境下的安全隐患 💡 向后兼容: - 已部署项目可选择性升级 - 手动添加ALLOWED_ORIGINS配置即可生效 🎉 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
53
install.sh
53
install.sh
@@ -2111,6 +2111,40 @@ create_env_file() {
|
||||
# 生成随机JWT密钥
|
||||
JWT_SECRET=$(openssl rand -base64 32)
|
||||
|
||||
# ========== CORS 安全配置自动生成 ==========
|
||||
# 根据部署模式自动配置 ALLOWED_ORIGINS 和 COOKIE_SECURE
|
||||
|
||||
if [[ "$USE_DOMAIN" == "true" ]]; then
|
||||
# 域名模式
|
||||
if [[ "$SSL_METHOD" == "8" || -z "$SSL_METHOD" ]]; then
|
||||
# HTTP 模式
|
||||
PROTOCOL="http"
|
||||
COOKIE_SECURE_VALUE="false"
|
||||
PORT_VALUE=${HTTP_PORT:-80}
|
||||
else
|
||||
# HTTPS 模式
|
||||
PROTOCOL="https"
|
||||
COOKIE_SECURE_VALUE="true"
|
||||
PORT_VALUE=${HTTPS_PORT:-443}
|
||||
fi
|
||||
|
||||
# 生成 ALLOWED_ORIGINS (标准端口不需要显示端口号)
|
||||
if [[ "$PORT_VALUE" == "80" ]] || [[ "$PORT_VALUE" == "443" ]]; then
|
||||
ALLOWED_ORIGINS_VALUE="${PROTOCOL}://${DOMAIN}"
|
||||
else
|
||||
ALLOWED_ORIGINS_VALUE="${PROTOCOL}://${DOMAIN}:${PORT_VALUE}"
|
||||
fi
|
||||
|
||||
print_info "CORS 配置: ${ALLOWED_ORIGINS_VALUE}"
|
||||
else
|
||||
# IP 模式(开发/测试环境)
|
||||
# 留空,后端默认允许所有来源(适合开发环境)
|
||||
ALLOWED_ORIGINS_VALUE=""
|
||||
COOKIE_SECURE_VALUE="false"
|
||||
print_warning "IP 模式下 CORS 将允许所有来源(仅适合开发环境)"
|
||||
print_info "生产环境建议使用域名模式"
|
||||
fi
|
||||
|
||||
cat > "${PROJECT_DIR}/backend/.env" << EOF
|
||||
# 管理员账号
|
||||
ADMIN_USERNAME=${ADMIN_USERNAME}
|
||||
@@ -2131,12 +2165,31 @@ PORT=${BACKEND_PORT}
|
||||
# 环境
|
||||
NODE_ENV=production
|
||||
|
||||
# CORS 跨域配置
|
||||
# 允许访问的前端域名(多个用逗号分隔)
|
||||
# 生产环境必须配置具体域名,开发环境可留空
|
||||
ALLOWED_ORIGINS=${ALLOWED_ORIGINS_VALUE}
|
||||
|
||||
# Cookie 安全配置
|
||||
# HTTPS 环境必须设置为 true
|
||||
COOKIE_SECURE=${COOKIE_SECURE_VALUE}
|
||||
|
||||
# 公开端口(nginx监听的端口,用于生成分享链接)
|
||||
# 如果使用标准端口(80/443)或未配置,分享链接将不包含端口号
|
||||
PUBLIC_PORT=${HTTP_PORT}
|
||||
EOF
|
||||
|
||||
print_success "配置文件创建完成"
|
||||
|
||||
# 显示安全提示
|
||||
if [[ -z "$ALLOWED_ORIGINS_VALUE" ]]; then
|
||||
echo ""
|
||||
print_warning "⚠️ 安全提示:"
|
||||
print_info " 当前配置允许所有域名访问(CORS: *)"
|
||||
print_info " 这仅适合开发环境,生产环境存在安全风险"
|
||||
print_info " 建议在生产环境使用域名模式部署"
|
||||
echo ""
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user