Commit Graph

60 Commits

Author SHA1 Message Date
9eade3e3e6 性能: 优化磁盘信息获取方式,改为异步执行
问题:
- /api/admin/storage-stats 使用 execSync 同步执行 df/wmic 命令
- 同步执行会阻塞事件循环,影响并发请求处理
- 磁盘信息获取可能需要几百毫秒,影响响应速度

优化内容:
1. 导入 util.promisify 将 exec 转换为异步函数
2. 将路由处理函数改为 async
3. 使用 execAsync 替代 execSync 执行 df 命令
4. 使用 execAsync 替代 execSync 执行 wmic 命令

优势:
- 不阻塞事件循环,提升并发性能
- 管理员查看存储统计时不影响其他用户操作
- 更符合 Node.js 最佳实践
2025-11-11 15:24:39 +08:00
60bc89ffea 修复: 修复文件下载时storage连接资源泄漏问题
问题:
- /api/files/download 路由在文件流下载时没有关闭storage连接
- 当下载大文件或多个并发下载时,会导致SFTP连接积累
- 可能导致连接池耗尽和内存泄漏

修复内容:
1. 添加stream.on('error')事件处理:流错误时关闭storage连接
2. 添加stream.on('close')事件处理:流传输完成时关闭storage连接
3. 增强catch块:在stream创建之前发生错误时关闭storage连接

影响范围:
- /api/files/download(用户文件下载)
- /api/share/:code/download-file(分享文件下载,已有处理逻辑)

测试建议:
- 测试正常文件下载
- 测试下载过程中断(用户取消下载)
- 测试下载不存在的文件(错误处理)
- 测试大文件下载和并发下载
2025-11-11 15:06:20 +08:00
c9553ff497 修复: 添加分享缓存过期机制(TTL)
问题描述:
- 分享文件缓存使用Map没有过期机制
- 缓存会无限增长,占用内存
- 文件更新或删除后缓存不会自动清除
- 长期运行可能导致内存泄漏

修复内容:
1. 实现TTLCache类
   - 支持自定义过期时间(默认1小时)
   - 自动检查缓存是否过期
   - API完全兼容Map(set/get/has/delete)

2. 添加自动清理机制
   - 每10分钟自动清理过期缓存
   - 记录清理日志便于监控
   - 提供destroy方法停止清理定时器

3. 替换shareFileCache为TTLCache实例
   - 设置1小时TTL
   - 无需修改现有代码
   - 向后兼容所有现有使用

缓存特性:
- get()时自动检查过期
- has()时自动检查过期
- 定期清理避免内存积累
- size()方法获取当前缓存数量

影响范围: 分享文件缓存管理

测试建议:
- 验证分享链接访问后缓存生效
- 验证1小时后缓存自动失效
- 监控日志确认定期清理执行

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 14:19:35 +08:00
4a9d31806b 修复: 优化文件上传临时文件清理机制
问题描述:
- 文件删除操作可能抛出异常导致程序中断
- 服务器崩溃或重启后残留临时文件无法清理
- 没有自动清理机制

修复内容:
1. 添加safeDeleteFile()安全删除函数
   - 使用try-catch捕获删除异常
   - 记录删除日志和错误信息
   - 不会因删除失败而中断主流程

2. 添加cleanupOldTempFiles()定期清理函数
   - 启动时自动清理超过24小时的临时文件
   - 防止临时文件堆积占用磁盘空间
   - 容错处理避免清理失败影响启动

3. 替换所有fs.unlinkSync为safeDeleteFile
   - 文件大小超限时的临时文件清理
   - 上传成功后的临时文件清理
   - 上传失败时的临时文件清理

影响范围: 文件上传功能

测试建议:
- 上传文件后检查uploads目录临时文件已删除
- 重启服务器验证旧临时文件自动清理
- 模拟删除失败场景验证不影响主流程

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 13:46:33 +08:00
3359cb8c01 安全: 为Cookie添加secure和sameSite安全标志
问题描述:
- Cookie仅设置了httpOnly,缺少其他安全标志
- 未启用secure标志,HTTPS环境下cookie可能被劫持
- 缺少sameSite保护,存在CSRF风险

修复内容:
1. 添加secure标志,从环境变量COOKIE_SECURE控制
   - HTTPS环境设置为true
   - HTTP环境设置为false
2. 添加sameSite: 'lax'防止CSRF攻击
   - lax模式在导航时允许cookie
   - 阻止第三方站点的POST请求携带cookie
3. 保留httpOnly: true防止XSS攻击
4. 保留maxAge: 7天的过期时间

配置说明:
- .env中设置 COOKIE_SECURE=true (HTTPS环境)
- .env中设置 COOKIE_SECURE=false (HTTP环境)

影响范围: 用户登录认证cookie安全性

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 13:36:12 +08:00
ee555af1a5 安全: 优化CORS配置,支持环境变量控制允许的来源
问题描述:
- CORS配置使用origin: true允许所有来源
- 无法限制跨域访问,存在CSRF风险
- 生产环境应该只允许特定域名访问

修复内容:
1. 从环境变量ALLOWED_ORIGINS读取允许的来源列表
2. 支持多个域名配置(逗号分隔)
3. 实现origin验证回调函数
4. 默认允许所有(*),但在生产环境会发出警告
5. 记录并拒绝未授权来源的请求

配置示例:
- 开发环境: ALLOWED_ORIGINS=*
- 生产环境: ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com

影响范围: 跨域请求控制

测试建议:
- 配置ALLOWED_ORIGINS后验证只有指定域名可以访问
- 生产环境使用*时应该看到警告日志

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 13:33:38 +08:00
9d510afa60 安全: 修复密码修改无需验证旧密码的安全漏洞
问题描述:
- 用户修改密码时不需要验证当前密码
- 攻击者获取session后可直接修改密码
- 违反基本的安全最佳实践

修复内容:
1. 添加current_password必填验证
2. 在更新密码前验证当前密码正确性
3. 验证失败返回401错误
4. 更新API文档注释

API变更:
POST /api/user/change-password
请求参数:
- current_password (新增,必填)
- new_password (已有,必填)

影响范围: 用户密码修改功能

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 13:23:18 +08:00
WanWanYun
f097dfd179 修复: 将默认上传限制从100MB提升到10GB
- database.js: 修改数据库初始化默认值为10GB (10737418240字节)
- server.js: 修改两处fallback默认值为10GB
- 确保新部署的系统默认支持10GB单文件上传
- 解决用户报告的100MB上传限制问题

版本: v1.2.5
2025-11-11 01:57:06 +08:00
WanWanYun
77bb2f7bdc 修复: 管理员账号密码无法正确设置的问题
- 在 server.js 开头添加 require('dotenv').config()
- 确保环境变量从 .env 文件正确加载
- 修复了安装时设置的管理员账号密码不生效的问题

版本: v1.2.4
2025-11-11 01:50:18 +08:00
WanWanYun
0f133962dc Initial commit - 玩玩云文件管理系统 v1.0.0
- 完整的前后端代码
- 支持本地存储和SFTP存储
- 文件分享功能
- 上传工具源代码
- 完整的部署文档
- Nginx配置模板

技术栈:
- 后端: Node.js + Express + SQLite
- 前端: Vue.js 3 + Axios
- 存储: 本地存储 / SFTP远程存储
2025-11-10 21:50:16 +08:00