安全: 修复JWT密钥使用默认值的安全隐患

问题描述:
- JWT_SECRET使用硬编码默认值,存在严重安全风险
- 生产环境token可被轻易伪造

修复内容:
1. 在auth.js中添加JWT密钥安全检查
   - 检测默认密钥并发出警告
   - 生产环境强制要求设置JWT_SECRET
2. 更新.env.example添加JWT_SECRET配置说明
   - 提供密钥生成方法
   - 添加其他安全配置项
3. 优化deploy.sh部署脚本
   - 自动生成随机JWT密钥
   - 检测并替换默认密钥

影响范围: 安全认证模块

测试建议:
- 启动服务验证JWT_SECRET警告正常显示
- 使用deploy.sh部署验证自动生成密钥

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-11 13:17:57 +08:00
parent d3b9800e35
commit a953bda39a
3 changed files with 101 additions and 11 deletions

View File

@@ -1,8 +1,28 @@
# FTP服务器配置
# 服务器配置
PORT=40001
NODE_ENV=production
# JWT安全密钥 (必须设置!使用随机字符串)
# 生成方法: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
JWT_SECRET=your-secret-key-change-in-production-PLEASE-CHANGE-THIS
# 管理员账号配置
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
# 存储根目录(本地存储模式)
STORAGE_ROOT=/app/storage
# CORS允许的来源多个用逗号分隔* 表示允许所有)
# 生产环境建议设置为具体域名,例如: https://yourdomain.com,https://www.yourdomain.com
ALLOWED_ORIGINS=*
# Cookie安全配置
# 如果使用HTTPS设置为true
COOKIE_SECURE=false
# FTP服务器配置可选用户可在界面配置
FTP_HOST=your-ftp-host.com
FTP_PORT=21
FTP_USER=your-username
FTP_PASSWORD=your-password
# 服务器配置
PORT=3000

View File

@@ -1,9 +1,41 @@
const jwt = require('jsonwebtoken');
const { UserDB } = require('./database');
// JWT密钥生产环境应该放在环境变量中)
// JWT密钥必须在环境变量中设置
const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-in-production';
// 安全检查验证JWT密钥配置
const DEFAULT_SECRETS = [
'your-secret-key-change-in-production',
'your-secret-key-change-in-production-PLEASE-CHANGE-THIS'
];
if (DEFAULT_SECRETS.includes(JWT_SECRET)) {
const errorMsg = `
╔═══════════════════════════════════════════════════════════════╗
║ ⚠️ 安全警告 ⚠️ ║
╠═══════════════════════════════════════════════════════════════╣
║ JWT_SECRET 使用默认值,存在严重安全风险! ║
║ ║
║ 请立即设置环境变量 JWT_SECRET ║
║ 生成随机密钥: ║
║ node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
║ ║
║ 在 backend/.env 文件中设置: ║
║ JWT_SECRET=你生成的随机密钥 ║
╚═══════════════════════════════════════════════════════════════╝
`;
if (process.env.NODE_ENV === 'production') {
console.error(errorMsg);
throw new Error('生产环境必须设置 JWT_SECRET');
} else {
console.warn(errorMsg);
}
}
console.log('[安全] JWT密钥已配置');
// 生成JWT Token
function generateToken(user) {
return jwt.sign(