Commit Graph

204 Commits

Author SHA1 Message Date
15ea15518c fix(security): 修复信任代理和HTTPS检测的安全漏洞
## 问题修复

1. **trust proxy 配置安全加固**
   - 默认改为 false(不信任任何代理)
   - 支持多种安全配置:数字跳数、loopback、IP/CIDR段
   - 当配置为 true 时输出安全警告

2. **HTTPS 检测基于可信代理链**
   - 使用 req.secure 替代直接读取 x-forwarded-proto
   - Express 会根据 trust proxy 配置判断是否采信代理头
   - 防止客户端伪造协议头绕过 HTTPS 强制

3. **客户端 IP 获取安全加固**
   - 使用 req.ip 替代直接读取 X-Forwarded-For
   - Express 会根据 trust proxy 配置正确处理代理链
   - 防止客户端伪造 IP 绕过限流

4. **健康检测增加安全警告**
   - trust proxy = true 时标记为严重安全问题
   - 提示管理员配置更安全的代理信任策略

5. **安装脚本优化**
   - 默认配置 TRUST_PROXY=1(单层Nginx场景)
   - 添加详细的配置说明和安全警告

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 19:42:25 +08:00
1dde17bb04 feat(admin): 添加系统健康检测功能
新增管理员健康检测面板,可检测以下配置项:
- 安全配置:JWT密钥、CORS、HTTPS、管理员账号、登录防爆破
- 服务状态:SMTP邮件、数据库连接、存储目录
- 运行配置:反向代理支持、Node环境

修改文件:
- backend/auth.js: 新增 isJwtSecretSecure() 函数
- backend/server.js: 新增 /api/admin/health-check API
- frontend/app.js: 新增健康检测数据和方法
- frontend/app.html: 新增健康检测UI界面

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 19:37:42 +08:00
d2aa115b5b fix: SFTP下载使用新窗口打开直链
- app.js downloadFile: SFTP有直链时用window.open新窗口打开
- share.html downloadFile: 分享页面同样处理
- 本地存储下载保持原有方式不变
- 解决HTTPS页面下载HTTP直链的Mixed Content问题

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 15:24:20 +08:00
482a610420 Revert "fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题"
This reverts commit a4c94b1f68.
2025-11-27 15:20:11 +08:00
a4c94b1f68 fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题
- downloadFile: 检测Mixed Content自动降级到后端代理下载
- getMediaUrl: 媒体预览同样处理Mixed Content
- 当HTTPS页面遇到HTTP直链时,自动使用服务器代理
- 添加Toast提示用户正在使用代理下载

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 14:59:09 +08:00
1b7585d54a fix(security): 完善SSRF防护的IP地址检查
- 完整IPv6私有地址检查:fc00::/7, fe80::/10, ff00::/8
- 添加云服务元数据地址检查:169.254.0.0/16
- 添加运营商级NAT地址检查:100.64.0.0/10
- 支持IPv4映射的IPv6地址递归检查
- 使用正则表达式优化172.16.0.0/12检查
- 代码结构更清晰,按IPv4/IPv6分类处理

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 14:56:42 +08:00
6305129e4f chore: 更新app.js版本号强制刷新缓存 2025-11-27 13:47:37 +08:00
ffed82a55c fix: 修复token过期后仍显示已登录状态的问题
- 页面加载时先向服务器验证token是否有效
- 添加axios响应拦截器,任何API返回401时自动登出
- 新增handleTokenExpired方法统一处理token失效
- token失效时显示Toast提示用户重新登录

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 13:43:11 +08:00
4f9b281039 feat: 添加SFTP空间使用统计功能
- 新增 /api/user/sftp-usage API,递归统计SFTP服务器空间使用情况
- 返回总使用空间、文件数、文件夹数
- 在设置页面显示SFTP空间统计信息
- 支持手动刷新统计数据
- 适配"仅SFTP"和"用户可选"两种权限模式的UI

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 13:39:51 +08:00
86ed1f4040 🔧 优化大文件上传支持
前端改进:
- 添加axios上传请求30分钟超时配置

Nginx改进:
- 增加代理超时时间到30分钟(1800秒)
- 添加 proxy_request_buffering off 避免大文件缓存到磁盘
- 添加 proxy_buffering off 禁用响应缓冲
- 优化 client_body_buffer_size

修复 ERR_HTTP2_PING_FAILED / Network Error 问题

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 12:24:49 +08:00
b188679f19 🐛 修复邮箱验证链接无效的问题
- 修复 UserDB.create() 中 verification_token 未哈希存储的bug
- 注册时的token现在会进行SHA256哈希,与验证时的逻辑保持一致
- 解决"无效或已过期的验证链接"错误

问题原因:注册时存储原文token,验证时用哈希后的token匹配,导致永远匹配不上

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 12:21:11 +08:00
3824f1ab82 🗑️ 移除不需要的文件
- 删除 docker-compose.yml
- 删除 restore-data.sh

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 11:50:04 +08:00
1943fea2e6 🐛 修复本地存储文件删除失败的问题
问题:sanitizeInput 函数将 / 转义为 &#x2F;,导致文件路径错误
修复:从 XSS 过滤中移除对 / 的转义,因为它是路径分隔符的合法字符

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 11:44:51 +08:00
2fb2321750 🔒 修复分享列表接口的目录遍历漏洞
- 在 /api/share/:code/list 增加路径规范化与范围校验
- 使用 path.posix.normalize 处理 subPath,阻断 ../ 遍历攻击
- 调用 isPathWithinShare 验证请求路径在分享范围内
- 统一使用安全的 requestedPath 进行存储访问和直链生成

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 11:10:48 +08:00
3045c354f4 优化上传体验:上传前检查文件大小限制
问题:原来文件上传完成后才提示超过大小限制,浪费用户时间

修复:
- 后端:添加 /api/config 公开接口返回上传大小限制
- 前端:页面加载时获取配置
- 前端:uploadFile 函数开始时检查文件大小,超限立即提示

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:46:10 +08:00
93050a23d9 🎨 优化管理员系统设置页面布局
在"最大上传大小"设置旁边添加保存按钮,使其更明显
添加提示:修改后需要重启服务才能生效

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:39:05 +08:00
d7a0e8cb9f 🐛 修复页面刷新时短暂显示混乱UI的问题
使用 Vue 的 v-cloak 指令,在 Vue 初始化完成前隐藏页面内容,
避免用户看到原始模板标记(FOUC问题)

- app.html: 添加 v-cloak
- share.html: 添加 v-cloak

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:30:50 +08:00
76f4b772a9 🎨 修复通知和按钮显示问题
1. Toast通知改为只显示最新一条,避免多条同时出现
2. 修复首页"已有账号"按钮在渐变背景上看不清的问题
   - 使用白色边框和文字
   - 添加半透明背景和模糊效果
   - 移动端也能清晰显示

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:27:14 +08:00
406b93019c 🐛 修复管理员存储统计磁盘容量显示为0的问题
- 将存储目录路径从 local-storage 改为 storage,与 storage.js 保持一致
- 添加目录不存在时自动创建的逻辑
- 支持 STORAGE_ROOT 环境变量配置

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 09:57:06 +08:00
474c8fe9b5 🔒 安全加固:修复多个中高危漏洞
修复内容:
1. Host Header 注入 - 添加 PUBLIC_BASE_URL 和 ALLOWED_HOSTS 白名单
2. API密钥暴力破解 - 添加速率限制(5次/小时,封锁24小时)
3. 路径遍历漏洞 - 增强路径验证,防止空字节注入和目录遍历
4. 令牌安全 - 密码重置和邮箱验证令牌使用SHA256哈希存储
5. 文件上传安全 - 阻止PHP/JSP/ASP等可执行脚本上传
6. IDOR防护 - 增强权限验证和安全日志
7. XSS防护 - 增强输入过滤,阻止javascript:等危险协议
8. 日志脱敏 - 移除验证码等敏感信息的日志输出
9. CSRF增强 - HTTPS环境使用strict模式Cookie
10. 邮箱枚举防护 - 密码重置统一返回消息
11. 速率限制 - 文件列表(60次/分)和上传(100次/小时)

配置说明:
- PUBLIC_BASE_URL: 必须配置,用于生成安全的邮件链接
- ALLOWED_HOSTS: 可选,Host头白名单
- COOKIE_SECURE=true: 生产环境必须开启

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 09:48:46 +08:00
47fe1466a4 🔒 修复中高危安全漏洞并增强文件安全验证
**关键安全修复:**
1. 修复弱随机数生成器(中危)
   - 分享码生成从Math.random()改为crypto.randomBytes()
   - 防止分享链接被预测或暴力猜测

2. 增强文件上传安全验证(中危)
   - 新增isSafePathSegment()函数验证文件名
   - 禁止路径遍历字符(..、/、\、控制字符)
   - 添加上传路径规范化和安全检查

**功能改进:**
- 管理员界面显示用户邮箱验证状态
- 优化用户状态展示(已封禁/未激活/正常)

**安全影响:**
- 消除分享链接可预测性风险
- 防止文件上传路径遍历攻击
- 提升文件系统访问控制安全性

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 01:37:02 +08:00
3e4aae60cb 🔒 修复命令注入漏洞并增强HTTPS配置
**安全修复:**
- 修复命令执行语法错误(wmic命令字符串拼接)
- 添加驱动器字母验证防止命令注入(仅允许A-Z)
- 修复命令执行参数构造错误

**功能增强:**
- 新增ENFORCE_HTTPS环境变量(强制HTTPS访问)
- 更新.env.example添加ENFORCE_HTTPS配置说明
- 更新install.sh支持自动配置ENFORCE_HTTPS
- 更新脚本自动为现有.env补充ENFORCE_HTTPS配置

这些改进消除了命令注入风险并提供了更灵活的HTTPS策略控制。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 01:17:32 +08:00
2ba254b1b5 🔒 增强安全防护:新增多层输入验证和XSS防护
- 添加用户名正则验证(支持中英文、数字、下划线等)
- 新增HTTPS强制访问选项(通过环境变量控制)
- 实现HTML转义函数防止邮件XSS注入
- 增强HTTP直链URL校验,仅允许http/https协议
- 添加buildHttpDownloadUrl安全构建下载URL
- 优化密码重置流程,增加账号状态验证
- 全面应用sanitizeHttpBaseUrl确保URL安全

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 00:52:56 +08:00
7b8b7afaf9 新增视图记忆功能,优化用户体验
功能新增:
- 自动记住用户上次停留的视图(文件/分享/设置/管理)
- 下次登录时恢复到上次的视图位置
- 登出时清理视图记录

安全优化:
- 新增 isViewAllowed() 方法,验证视图权限
- 防止普通用户越权访问管理后台
- 只记录合法且有权限的视图

代码优化:
- 简化登录后的视图跳转逻辑
- switchView() 支持 force 参数,用于强制刷新
- 统一视图切换和权限检查流程

用户体验提升:
- 减少重复导航,直达上次工作位置
- 管理员可以记住后台页面位置
- 更加智能和人性化

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 22:09:40 +08:00
98cadb3c8b 🧹 清理冗余文档和脚本文件
项目清理:
- 删除重复的部署文档(DEPLOY.md, DEPLOYMENT.md, DOCKER部署指南.md等)
- 删除过时的验证码功能文档(CAPTCHA_*.md)
- 删除临时修复脚本(fix_*.sh)
- 删除旧版本文档(VERSION.txt, UPDATE_SUMMARY_v1.1.0.md)
- 删除重复的部署脚本(deploy.sh)

精简原因:
- README.md 已包含完整的部署和使用说明
- install.sh 提供一键部署功能
- 减少文档冗余,降低维护成本
- 保持项目结构清晰简洁

保留的核心文件:
- README.md(主文档)
- install.sh(一键部署脚本)
- docker-compose.yml(Docker 配置)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 21:38:56 +08:00
b4d32476e3 🎨 简化存储管理界面,移除重复按钮
前端优化:
- 移除顶部的快速切换按钮
- 只保留下方详细的卡片式按钮
- 保留视觉指示器(进度条动画)
- 减少界面冗余,提升简洁性

视觉改进:
- 界面更加简洁清爽
- 避免重复的操作按钮
- 用户操作更加明确

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 21:26:31 +08:00
220cc2341e 💄 优化存储管理卡片布局对齐
前端优化:
- 使用 flexbox 布局确保卡片等高
- 按钮自动对齐到卡片底部
- 添加 align-items: stretch 确保卡片高度一致
- 使用 margin-top: auto 将按钮区域推到底部

视觉改进:
- 两个存储卡片高度保持一致
- 操作按钮在同一水平线上对齐
- 整体布局更加美观和协调

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 21:11:48 +08:00
600545d652 🐛 修复用户信息同步时机问题
前端修复:
- 在检测存储配置更新前,先同步完整的用户信息
- 确保 has_ftp_config 等字段及时更新
- 使用对象扩展运算符合并用户信息,避免覆盖现有字段

问题修复:
- 修复存储配置检测可能使用过期用户信息的问题
- 确保用户配置状态与服务器保持同步

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 21:07:08 +08:00
1c8eded07e 💄 优化存储配置提示逻辑
前端优化:
- 新增 profileInitialized 标志,避免首次加载时显示误导性提示
- 新增 suppressStorageToast 标志,用户主动切换后不显示配置同步提示
- 首次加载时只同步存储配置,不弹出提示
- 用户主动切换存储方式后,下一次配置同步不提示"管理员已修改"

用户体验改进:
- 避免用户刚登录就看到"管理员已更改存储方式"的误导提示
- 区分用户主动操作和管理员修改操作
- 减少不必要的提示干扰

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:59:20 +08:00
382aee8e61 💄 优化文件下载体验
前端优化:
- 统一文件下载逻辑,HTTP 和 SFTP 下载使用相同方式
- 移除 window.open 弹出新窗口的方式
- 统一使用隐藏的 <a> 标签触发下载
- 简化代码逻辑,提高可维护性

用户体验改进:
- 避免浏览器弹出窗口拦截
- 下载过程更加流畅
- 减少额外的页面跳转

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:51:14 +08:00
b4cba469aa 🐛 修复邮件验证链接兼容性问题
前端优化:
- 新增 getTokenFromUrl() 方法,支持解析不规范的 URL 参数
- 新增 sanitizeUrlToken() 方法,统一清理 URL 中的 token
- 兼容旧版邮件链接格式(缺少 ? 的情况)
- 优化 URL 参数提取逻辑,使用正则表达式兼容多种格式
- 改进代码复用性,减少重复代码

问题修复:
- 修复某些邮件客户端生成的链接无法正常解析 token 的问题
- 确保验证链接和重置链接在各种环境下都能正常工作

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:24:24 +08:00
4e4ef0405b 🔒 增强安全防护:防止 SSRF 攻击和 Token 泄露
后端安全增强:
- 新增 SSRF 防护机制,验证 SFTP 目标地址
- 添加 isPrivateIp() 函数,检测并阻止连接内网地址
- 添加 validateSftpDestination() 函数,验证主机名和端口
- 支持 DNS 解析和 IP 地址验证
- 添加 SFTP 连接超时配置(默认8秒)
- 移除 URL 参数中的 token 认证,只接受 Header 或 HttpOnly Cookie

前端安全改进:
- 移除下载链接中的 token 参数
- 改为依赖同域 Cookie 进行身份验证
- 避免 token 在 URL 中暴露,防止日志泄露

环境变量配置:
- ALLOW_PRIVATE_SFTP=true 可允许连接内网(测试环境)
- SFTP_CONNECT_TIMEOUT 可配置连接超时时间

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:07:34 +08:00
19a6c70d42 优化 SFTP 配置流程和界面
前端优化:
- 重新设计 SFTP 配置引导弹窗,采用渐变色头部
- 新增独立的 SFTP 配置弹窗,支持导入 .inf 配置文件
- 移除 forceSftpConfigVisible 标志,改用弹窗方式
- 简化存储切换逻辑,提升用户体验
- 优化配置表单布局和提示文字

交互改进:
- 支持拖拽导入配置文件
- 优化配置流程,更加直观
- 改进错误提示和操作引导

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:30:00 +08:00
db520f931e 📝 重写 README 文档 & 优化前端功能
文档更新:
- 完全重写 README.md,更加详细和专业
- 添加一键部署命令(curl 和 wget 两种方式)
- 详细介绍双存储模式、邮件系统、安全防护等特性
- 添加完整的使用指南和常见问题解答
- 更新项目结构和技术栈说明
- 添加版本更新日志

前端优化:
- 优化存储管理界面交互
- 改进文件管理功能

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:21:39 +08:00
02f0f3aa24 🔥 移除旧密码重置审核系统 & 优化存储管理UI
后端改进:
- 移除需要管理员审核的密码重置请求功能
- 简化密码重置流程,直接使用邮件重置
- 删除 password_reset_requests 表及相关代码

前端优化:
- 重新设计存储管理界面,采用现代化渐变风格
- 改进存储方式切换交互,添加动画效果
- 优化视觉层次和信息展示

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:12:57 +08:00
104d7fe0ef 优化邮件验证和密码重置链接
- 修改邮件中的验证和重置链接,直接指向 app.html 页面
- 在落地页添加容错脚本,自动重定向带 token 的请求到应用页
- 提升用户体验,减少跳转步骤

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 18:57:50 +08:00
cfbb134587 🐛 修复邮箱验证和密码重置的时间戳问题
后端修复:
- 修改时间戳存储格式:从 ISO 字符串改为数值时间戳(毫秒)
- 优化时间戳比较逻辑:兼容新旧格式的时间戳
- 修复 VerificationDB.consumeVerificationToken() 的时间比较
- 修复 PasswordResetTokenDB.use() 的时间比较
- 统一使用 Date.now() 生成时间戳

前端改进:
- 新增 verifyMessage 独立显示验证相关提示
- 优化邮箱验证成功后的用户体验(自动切换到登录表单)
- 优化密码重置成功后的用户体验(自动切换到登录表单)
- 改进提示信息显示方式

技术细节:
- SQLite 时间比较:strftime('%s','now')*1000 获取当前毫秒时间戳
- 兼容旧数据:同时支持字符串和数值时间戳比较

这个修复解决了邮箱验证令牌一直提示过期的问题。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:48:32 +08:00
472b98153d 🔧 优化install.sh的Nginx处理逻辑
改进 restart_nginx_safe():
- systemctl 改用 reload 代替 restart,避免不必要的服务中断
- 优先使用 reload,如未运行才使用 start
- 添加端口占用检测提示

改进 ensure_nginx_installed():
- 不再强制自动安装 Nginx
- 改为友好提示:支持用户使用已有反向代理(如宝塔/1Panel等)
- 允许用户选择手动安装或跳过

增强宝塔面板支持:
- 修复模式支持读取宝塔 Nginx 配置路径
- 支持备份宝塔配置文件
- 清理宝塔配置备份文件

改进服务检测:
- Nginx 检测兼容多种运行方式(systemctl/进程/宝塔)
- 更准确的进程检测逻辑

这些优化使脚本更灵活,兼容更多部署场景,减少端口冲突问题。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:39:28 +08:00
61866761bb 增强install.sh对宝塔面板的支持
新增功能:
- 添加 ensure_nginx_installed() 函数,自动检测并安装 Nginx
- 在所有 Nginx 配置函数中调用确保 Nginx 已安装
- restart_nginx_safe() 新增宝塔面板路径支持(/www/server/nginx/sbin/nginx)

改进点:
- 优先尝试宝塔面板的 Nginx 路径
- 支持在更新/修复模式下自动安装缺失的 Nginx
- 根据不同包管理器自动选择安装方式(apt/yum/dnf/zypper)
- 增强错误提示和安装验证

兼容性:
- 完全兼容宝塔面板环境
- 兼容标准 Linux 系统环境
- 支持多种发行版的包管理器

这些改进使脚本能在更多环境下自动化部署,提升用户体验。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:09:48 +08:00
4cf77f00a0 🔧 改进install.sh的Nginx重启机制
新增功能:
- 添加 restart_nginx_safe() 函数,提供安全的Nginx重启/重载机制
- 支持多种重启方式的自动回退(systemctl → nginx -s reload → nginx直接启动)
- 添加配置测试验证(nginx -t)确保配置正确后再重启
- 改进进程检测,兼容无systemd环境

改进点:
- 替换所有直接的 systemctl restart/reload 为安全重启函数
- 增强错误处理和用户提示
- 提升脚本在不同系统环境下的兼容性
- 防止错误配置导致Nginx服务中断

这些改进使安装脚本更加健壮,减少部署失败的风险。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 14:46:22 +08:00
5ed13351f9 🐛 修复邮件发送功能的小问题
- 修复发件人字段处理,避免空字符串导致发送失败
- 改进SMTP测试错误消息显示,支持详细错误信息
- 更新package-lock.json锁定nodemailer版本

这些修复提升了邮件功能的稳定性和错误提示的友好性。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 14:37:34 +08:00
6958655d6e ✉️ 添加完整的邮件系统功能
后端新增功能:
- 集成 nodemailer 支持 SMTP 邮件发送
- 新增邮箱验证系统(VerificationDB)
- 新增密码重置令牌系统(PasswordResetTokenDB)
- 实现邮件发送限流(30分钟3次,全天10次)
- 添加 SMTP 配置管理接口
- 支持邮箱激活和密码重置邮件发送

前端新增功能:
- 注册时邮箱必填并需验证
- 邮箱验证激活流程
- 重发激活邮件功能
- 基于邮箱的密码重置流程(替代管理员审核)
- 管理后台 SMTP 配置界面
- SMTP 测试邮件发送功能

安全改进:
- 邮件发送防刷限流保护
- 验证令牌随机生成(48字节)
- 重置链接有效期限制
- 支持 SSL/TLS 加密传输

支持的邮箱服务:QQ邮箱、163邮箱、企业邮箱等主流SMTP服务

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 14:28:35 +08:00
fafd897588 🚀 增强验证码安全性和防刷机制
- 添加验证码请求限流器(30次/10分钟,超限封锁30分钟)
- 添加验证码请求间隔控制(最小3秒间隔)
- 升级验证码复杂度:4位数字 → 6位字母数字混合
- 移除易混淆字符(I/l/O/0/1等)
- 优化验证码显示参数(尺寸、干扰线等)

这些改进大幅提升了验证码的安全性,有效防止暴力破解和恶意刷新。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 10:25:10 +08:00
46fb4d0fd0 🔧 改进反向代理和Session安全配置
- 添加trust proxy配置,支持在Nginx/Cloudflare后正确识别客户端IP和协议
- 优化Session cookie配置,HTTPS环境下使用sameSite=none以支持跨域
- 移除测试脚本test_captcha.sh

这些改进确保系统在反向代理环境下正常工作,并提升了安全性。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 10:03:57 +08:00
836c895e37 🔧 修复install.sh中的shell变量转义问题
- 修复3处Nginx配置中的Cookie变量转义($http_cookie → \$http_cookie)
- 移除多余的文档文件(交接文档、更新说明)
- 清理文件末尾空行

这个修复确保install.sh脚本能正确生成Nginx配置,而不会将$http_cookie误解释为shell变量。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 09:52:31 +08:00
816a712cd8 📋 添加完整交接文档 - 验证码功能 2025-11-21 17:08:33 +00:00
3ef0fa844a 📖 添加验证码快速修复指南 2025-11-21 17:05:22 +00:00
225c3a5ded 🔧 更新install.sh - 添加Nginx Cookie传递配置
## 修改说明
install.sh生成的Nginx配置中缺少Cookie传递设置,
导致验证码session无法正常工作。

## 修改内容

### install.sh
在3处 `location /api` 配置中添加Cookie传递:

```nginx
# Cookie传递配置(验证码session需要)
proxy_set_header Cookie $http_cookie;
proxy_pass_header Set-Cookie;
```

修改位置:
- 行2383: HTTP配置(configure_nginx_http_first)
- 行2665: HTTPS配置(configure_nginx_final)
- 行2802: 虚拟主机配置

### 新增文件

1. **fix_install_sh.sh**
   - 自动化修改脚本
   - 备份原文件后自动添加Cookie配置
   - 可重复运行(检测已修改则跳过)

2. **INSTALL_SH_UPDATE.md**
   - 详细的修改说明文档
   - 手动修改方法
   - 验证和应用指南

## 使用方法

### 新部署
直接运行修改后的install.sh即可

### 自动修改
```bash
./fix_install_sh.sh
```

### 已部署服务
需要手动更新Nginx配置:
```bash
vim /etc/nginx/conf.d/玩玩云.conf
# 在 location /api 块中添加Cookie配置
nginx -t
nginx -s reload
```

## 配套修复
此修改配合以下提交才能完整工作:
- 后端session配置 (7ce9d95)
- 前端axios配置 (83773ef)
- nginx/nginx.conf (5f3fd38)
- install.sh (本提交)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 16:54:26 +00:00
5f3fd38bb1 🐛 修复Nginx Cookie传递问题 - 验证码Session关键修复
## 问题根源(终于找到了!)
Nginx反向代理默认不会正确传递Cookie,导致:
1. 后端设置的 Set-Cookie 响应头被Nginx丢弃
2. 前端发送的 Cookie 请求头无法到达后端
3. 验证码session完全无法工作

## 症状
- 验证码一直提示"已过期"
- 即使前端配置了 withCredentials: true 也无效
- 浏览器看不到 captcha.sid cookie

## 修复方案

在 nginx.conf 的 /api/ location 块中添加:

```nginx
# Cookie传递配置(验证码session需要)
proxy_set_header Cookie $http_cookie;
proxy_pass_header Set-Cookie;
```

### 配置说明

1. `proxy_set_header Cookie $http_cookie;`
   - 将浏览器发送的Cookie转发给后端
   - 后端可以读取验证码session

2. `proxy_pass_header Set-Cookie;`
   - 将后端的Set-Cookie响应头传递给浏览器
   - 浏览器可以保存验证码session cookie

## 完整的验证码工作流程

1. **验证码生成**:
   ```
   浏览器 → Nginx → 后端生成验证码和session
   后端 → Set-Cookie: captcha.sid=xxx → Nginx → 浏览器保存
   ```

2. **验证码验证**:
   ```
   浏览器(带Cookie) → Nginx → 后端读取session验证
   ```

## 部署说明

### Docker环境
```bash
docker-compose down
docker-compose up -d
```

### 手动Nginx
```bash
nginx -t  # 测试配置
nginx -s reload  # 重新加载
```

## 验证方法

1. 清除浏览器Cookie
2. F12 → Network → 清除日志
3. 访问登录页,输错密码2次
4. 查看 /api/captcha 响应头应该有 Set-Cookie
5. 查看 /api/login 请求头应该有 Cookie: captcha.sid=xxx
6. 输入验证码应该能正常通过

## 相关提交

此修复配合以下提交才能完整工作:
- 后端session配置修复 (7ce9d95)
- 前端axios withCredentials配置 (83773ef)
- Nginx Cookie传递配置 (本提交)

三个修复缺一不可!

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 16:49:38 +00:00
fca00aa9fa 🔄 更新前端版本号 - 强制刷新浏览器缓存
## 问题
浏览器缓存了旧版本的app.js,新的axios配置无法生效

## 修改
app.js?v=20251110001 → app.js?v=20251121001

## 说明
版本号更新后,浏览器会自动下载新的app.js文件,
包含最新的axios withCredentials配置

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 16:46:58 +00:00