安全: 修复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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user