 19174616018andClaude
|
38d18018a5
|
security: 实施 HttpOnly Cookie 鉴权方案
## 后端修改
- 新增 /api/logout 接口清除认证 Cookie
## 前端修改
- 移除 localStorage 存储 token/refreshToken(防止 XSS 窃取)
- 移除所有手动 Authorization 头(共36处)
- checkLoginStatus 改为直接调用 API 验证(Cookie 自动携带)
- logout 改为调用后端接口清除 Cookie
- 简化 token 刷新逻辑
## 安全性提升
- Token 从 localStorage 迁移到 HttpOnly Cookie
- XSS 攻击无法通过 JS 读取 token
- 配合 SameSite 属性防御 CSRF 攻击
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 10:33:27 +08:00 |
|
 19174616018andClaude
|
e81b1dd89e
|
fix: 修复移动端文件列表滑动问题
- 移除 touchstart 中的 event.preventDefault(),不再阻止默认滚动
- 添加 handleLongPressMove 方法检测手指移动
- 滑动超过 10px 时自动取消长按,允许正常滚动
- 为 grid 和 list 视图的文件项添加 @touchmove 事件
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 10:12:46 +08:00 |
|
 19174616018andClaude
|
ae27ee3791
|
fix: 修复验证码session保存时序问题
问题原因:
- 验证码API在session.save()完成前就发送响应
- 导致客户端获取验证码图片时session可能未保存成功
修复:
- 将res.send()移到session.save()回调内
- 确保session保存成功后再返回验证码图片
- 添加验证码验证调试日志帮助诊断
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 14:11:36 +08:00 |
|
 19174616018andClaude
|
a9cc3a56ad
|
fix: 修复验证码请求429错误
问题:
- 短时间内多次请求验证码触发限流(429 Too Many Requests)
修复:
- 后端:验证码最小请求间隔从3秒改为1秒
- 前端:添加2秒防抖,避免重复请求
- 前端:429错误时保留已有验证码图片
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 14:06:23 +08:00 |
|
 19174616018andClaude
|
06f60bec06
|
fix: 修复验证码session不一致的问题
问题原因:
- 验证码图片通过<img src>加载,可能不携带session cookie
- 导致验证码生成和表单提交使用不同的session
修复方案:
- 改用axios请求获取验证码(blob格式)
- 确保验证码请求携带withCredentials
- 点击"忘记密码"时立即加载验证码
- 切换到注册模式时立即加载验证码
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 13:50:06 +08:00 |
|
 19174616018andClaude
|
6722d70666
|
feat: 实现Token刷新机制,缩短登录有效期
安全改进:
- Access Token有效期从7天缩短为2小时
- 添加Refresh Token机制(有效期7天)
- 关闭浏览器后较快失效,提升安全性
后端修改(auth.js):
- 添加generateRefreshToken函数生成刷新令牌
- 添加refreshAccessToken函数验证并刷新access token
- 分离ACCESS_TOKEN_EXPIRES和REFRESH_TOKEN_EXPIRES配置
后端修改(server.js):
- 登录时返回refreshToken和expiresIn
- 添加/api/refresh-token接口用于刷新token
- Cookie有效期同步调整为2小时
前端修改(app.js):
- 保存refreshToken到localStorage
- 添加自动刷新定时器(过期前5分钟刷新)
- 页面加载时若token过期自动尝试刷新
- 登出时清除refreshToken和定时器
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 13:46:51 +08:00 |
|
 19174616018andClaude
|
8bcd097db6
|
feat: 注册、重置密码、重发验证邮件添加验证码功能
后端修改:
- 添加通用验证码验证函数 verifyCaptcha()
- /api/register 接口添加验证码验证
- /api/password/forgot 接口添加验证码验证
- /api/resend-verification 接口添加验证码验证
前端修改:
- 注册表单添加验证码输入框和图片
- 忘记密码模态框添加验证码
- 重发验证邮件区域添加验证码输入
- 添加各表单的验证码刷新方法
- 提交失败后自动刷新验证码
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 13:11:03 +08:00 |
|
 19174616018andClaude
|
98d42b161c
|
✨ 新增独立的邮箱验证和重置密码页面
- 新建 verify.html: 邮箱验证专用页面,简洁美观
- 新建 reset-password.html: 重置密码专用页面,带表单验证
- 两个页面都支持亮色/暗色主题切换
- 更新 index.html 和 app.html 的重定向逻辑
- 旧链接自动重定向到新页面
用户体验改进:不再显示登录窗口背景,专注于当前操作
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 00:09:24 +08:00 |
|
 19174616018andClaude
|
4e0a8cd370
|
✨ 首页和登录页支持全局主题
- index.html 添加亮色主题 CSS 变量和样式
- index.html 添加 JS 自动加载全局主题
- app.js 修改 initTheme,未登录时从公开 API 获取全局主题
- 登录页面现在会跟随管理员设置的全局主题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 00:00:53 +08:00 |
|
 19174616018andClaude
|
38aeb18006
|
🔧 改进全局主题设置提示信息
当管理员设置了个人偏好时,提示"你设置了个人偏好,不受全局影响"
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:49:06 +08:00 |
|
 19174616018andClaude
|
73f2f021fd
|
🔧 添加全局主题设置调试日志
添加console.log帮助诊断全局主题设置不生效的问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:45:31 +08:00 |
|
 19174616018andClaude
|
1cb4d64d72
|
🐛 修复亮色主题下按钮不可见问题
- 添加 .btn-secondary 亮色主题样式(蓝色半透明背景)
- 添加 .btn-icon 亮色主题样式
- 修复管理员设置页面全局主题按钮显示问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:42:52 +08:00 |
|
 19174616018andClaude
|
f1b838f5e3
|
🐛 修复亮色主题导航栏文字颜色
- 添加 .nav-item 深色文字颜色
- 修复悬停和激活状态的颜色
- 添加 .user-info 深色文字
- 修复用户头像图标颜色
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:35:29 +08:00 |
|
 19174616018andClaude
|
f764604fd3
|
🐛 修复亮色主题下导航栏等组件的样式问题
- 添加亮色主题导航栏样式覆盖(白色半透明背景)
- 修复导航项悬停效果在亮色主题下的显示
- 修复用户信息区域的亮色主题样式
- 添加卡片、表格、模态框、输入框的亮色主题样式
这个修复解决了亮色主题下导航栏变黑、文字不可见的问题。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:33:19 +08:00 |
|
 19174616018andClaude
|
376bf48bd1
|
🐛 修复主题偏好刷新后丢失的问题
原因:authMiddleware 中的 req.user 对象没有包含 theme_preference 字段,
导致 /api/user/theme 接口始终返回 undefined,用户设置的主题无法被正确读取。
修复:在 req.user 中添加 theme_preference 字段
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:25:25 +08:00 |
|
 19174616018andClaude
|
07618abc06
|
🐛 修复暗色主题下存储管理区域的样式冲突
- 修复存储管理外层容器的白色渐变背景
- 修复本地存储和SFTP存储卡片的白色背景
- 修复上传进度条的白色背景
- 修复SFTP配置卡片的白色背景
- 统一使用CSS变量实现主题适配
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:14:27 +08:00 |
|
 19174616018andClaude
|
121459f1b3
|
✨ 添加主题切换功能:支持暗色/亮色玻璃主题
功能说明:
- 管理员可在系统设置中配置全局默认主题
- 普通用户可在设置页面选择:跟随全局/暗色/亮色
- 分享页面自动继承分享者的主题偏好
- 主题设置实时保存,刷新后保持
技术实现:
- 后端:数据库添加theme_preference字段,新增主题API
- 前端:CSS变量实现主题切换,localStorage缓存避免闪烁
- 分享页:加载时获取分享者主题设置
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:02:48 +08:00 |
|
 19174616018andClaude
|
f0802ee89e
|
🎨 完善暗色主题:修复右键菜单、分享页面等
- 修复右键菜单白色背景问题(改为暗色玻璃效果)
- 修复分享成功链接不可见问题(添加绿色高亮)
- 修复媒体预览器白色背景
- 完全重写share.html为暗色主题(与主应用风格统一)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 22:51:24 +08:00 |
|
 19174616018andClaude
|
9be47f2009
|
🕐 修复系统日志时区问题
- 日志写入时使用 datetime('now', 'localtime') 替代 CURRENT_TIMESTAMP
- 日志统计和清理查询也使用本地时间
- 解决日志时间比实际时间慢8小时的问题(UTC → 北京时间)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 22:20:33 +08:00 |
|
 19174616018andClaude
|
b3fbd4c61f
|
🎨 将app.html全面改为暗色主题
- 添加CSS变量系统(背景色、边框色、文字颜色、强调色)
- 页面背景改为深色渐变效果
- 卡片、弹窗使用毛玻璃效果(backdrop-filter blur)
- 导航栏改为暗色玻璃样式
- 表单、按钮、表格全部适配暗色主题
- 添加自定义滚动条样式
- 统一警告/成功/错误提示框为半透明风格
- 全局替换浅色背景和文字颜色
与index.html保持一致的暗色毛玻璃设计风格
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 22:16:28 +08:00 |
|
 19174616018andClaude
|
c8d8643e07
|
feat(ui): 重新设计首页为暗色玻璃态风格
新设计特点:
- 暗色主题 + 动态渐变光斑背景
- 玻璃态卡片和导航栏效果
- 简洁两栏布局(文案+功能卡片)
- 网格背景增加科技感
- 固定底部技术栈展示
- 完整响应式适配
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 21:22:14 +08:00 |
|
 19174616018andClaude
|
94f57b5b14
|
feat(install): 添加数据库自动迁移功能
更新和修复模式会自动检测并迁移旧数据库:
- 检测 backend/ftp-manager.db(旧路径)
- 自动迁移到 backend/data/database.db(新路径)
- 同时迁移 journal/wal/shm 文件
- 新旧数据库同时存在时警告用户
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 21:08:14 +08:00 |
|
 19174616018andClaude
|
aca6a44a50
|
fix(database): 读取环境变量DATABASE_PATH而非硬编码路径
之前硬编码为 ftp-manager.db,导致 .env 中的 DATABASE_PATH 无效。
修复:
- 读取 DATABASE_PATH 环境变量
- 默认路径改为 ./data/database.db
- 自动创建数据库目录
- 启动时打印数据库路径便于确认
⚠️ 升级注意:旧用户需要迁移数据库文件:
mv backend/ftp-manager.db backend/data/database.db
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 21:07:12 +08:00 |
|
19174616018
|
11058fe9b0
|
fix(admin): 调整角色列宽度防止换行
|
2025-11-27 20:52:31 +08:00 |
|
 19174616018andClaude
|
ad9b9999ed
|
feat(admin): 用户列表添加角色列
- 新增"角色"列,显示"管理员"或"用户"标签
- 管理员显示紫色渐变背景+皇冠图标
- 普通用户显示灰色背景+用户图标
- 调整列宽适配新增列
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:47:47 +08:00 |
|
 19174616018andClaude
|
6a0a8ac758
|
fix(security): 修复邮箱验证绕过漏洞
之前的迁移脚本会在每次服务启动时将所有 is_verified=0 的用户
自动设为已验证,导致攻击者可以用假邮箱注册后等待服务重启绕过验证。
修复方案:仅将 is_verified IS NULL 且 verification_token IS NULL 的
用户设为已验证(这些是邮箱验证功能上线前注册的老用户)。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:35:01 +08:00 |
|
 19174616018andClaude
|
94662b8c07
|
feat(admin): 管理员页面改为标签页模式
- 添加5个标签页:概览、设置、监控、用户、工具
- 概览:调试模式开关、服务器存储统计
- 设置:系统设置、SMTP邮件配置
- 监控:健康检测、系统日志
- 用户:用户管理列表
- 工具:上传工具管理
优化管理员页面布局,减少滚动,提升使用体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:31:26 +08:00 |
|
 19174616018andClaude
|
c43181d983
|
fix(install): 修复更新/修复模式自动补充TRUST_PROXY配置
- 在 update_patch_env 中添加 TRUST_PROXY 检查和自动补充
- 修复模式(repair_main)现在也会调用 update_patch_env
- 更新 .env.example 添加 TRUST_PROXY 配置说明
- 更新修复模式的提示信息
解决使用Nginx反向代理时HTTPS检测失败的问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:13:37 +08:00 |
|
 19174616018andClaude
|
e1943e4caa
|
feat(admin): 添加系统日志功能
## 新功能
1. **系统日志数据库**
- 新增 system_logs 表
- 支持日志级别:debug/info/warn/error
- 支持日志分类:auth/user/file/share/system/security
- 记录用户ID、用户名、IP地址、User-Agent
2. **日志记录**
- 用户注册成功/失败
- 用户登录成功/失败(密码错误)
- 系统操作(日志清理等)
3. **管理员API**
- GET /api/admin/logs - 查询日志(支持分页和筛选)
- GET /api/admin/logs/stats - 获取日志统计
- POST /api/admin/logs/cleanup - 清理旧日志
4. **前端界面**
- 日志列表展示(时间、级别、分类、内容、用户、IP)
- 筛选功能(级别、分类、关键词搜索)
- 分页导航
- 清理旧日志功能
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 19:54:46 +08:00 |
|
 19174616018andClaude
|
4d49b3a7f8
|
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 |
|
 19174616018andClaude
|
9c62bc6bf6
|
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 |
|
 19174616018andClaude
|
35d5e1b600
|
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 |
|
19174616018
|
b598c99773
|
Revert "fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题"
This reverts commit ef476e23d2.
|
2025-11-27 15:20:11 +08:00 |
|
 19174616018andClaude
|
ef476e23d2
|
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 |
|
 19174616018andClaude
|
ffc0a4e7a2
|
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 |
|
19174616018
|
fadd1fc5d7
|
chore: 更新app.js版本号强制刷新缓存
|
2025-11-27 13:47:37 +08:00 |
|
 19174616018andClaude
|
828aca897e
|
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 |
|
 19174616018andClaude
|
0bfb0a3cc9
|
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 |
|
 19174616018andClaude
|
ba62b4e397
|
🔧 优化大文件上传支持
前端改进:
- 添加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 |
|
 19174616018andClaude
|
bfe6cf05c4
|
🐛 修复邮箱验证链接无效的问题
- 修复 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 |
|
 19174616018andClaude
|
c3c6198a2f
|
🗑️ 移除不需要的文件
- 删除 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 |
|
 19174616018andClaude
|
d8f2220613
|
🐛 修复本地存储文件删除失败的问题
问题:sanitizeInput 函数将 / 转义为 /,导致文件路径错误
修复:从 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 |
|
 19174616018andClaude
|
871efc8382
|
🔒 修复分享列表接口的目录遍历漏洞
- 在 /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 |
|
 19174616018andClaude
|
7312798884
|
✨ 优化上传体验:上传前检查文件大小限制
问题:原来文件上传完成后才提示超过大小限制,浪费用户时间
修复:
- 后端:添加 /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 |
|
 19174616018andClaude
|
b99c5e1e26
|
🎨 优化管理员系统设置页面布局
在"最大上传大小"设置旁边添加保存按钮,使其更明显
添加提示:修改后需要重启服务才能生效
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 10:39:05 +08:00 |
|
 19174616018andClaude
|
91cdc72318
|
🐛 修复页面刷新时短暂显示混乱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 |
|
 19174616018andClaude
|
510550a8d5
|
🎨 修复通知和按钮显示问题
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 |
|
 19174616018andClaude
|
48d40f7cde
|
🐛 修复管理员存储统计磁盘容量显示为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 |
|
 19174616018andClaude
|
d515f3f922
|
🔒 安全加固:修复多个中高危漏洞
修复内容:
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 |
|
 19174616018andClaude
|
94112e5453
|
🔒 修复中高危安全漏洞并增强文件安全验证
**关键安全修复:**
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 |
|
 19174616018andClaude
|
ea2f5aede8
|
🔒 修复命令注入漏洞并增强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 |
|
 19174616018andClaude
|
ef9965c632
|
🔒 增强安全防护:新增多层输入验证和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 |
|
 19174616018andClaude
|
563026d4e8
|
✨ 新增视图记忆功能,优化用户体验
功能新增:
- 自动记住用户上次停留的视图(文件/分享/设置/管理)
- 下次登录时恢复到上次的视图位置
- 登出时清理视图记录
安全优化:
- 新增 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 |
|
 19174616018andClaude
|
8b5885675a
|
🧹 清理冗余文档和脚本文件
项目清理:
- 删除重复的部署文档(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 |
|
 19174616018andClaude
|
6a40a6a6f5
|
🎨 简化存储管理界面,移除重复按钮
前端优化:
- 移除顶部的快速切换按钮
- 只保留下方详细的卡片式按钮
- 保留视觉指示器(进度条动画)
- 减少界面冗余,提升简洁性
视觉改进:
- 界面更加简洁清爽
- 避免重复的操作按钮
- 用户操作更加明确
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 21:26:31 +08:00 |
|
 19174616018andClaude
|
4d1e0766cf
|
💄 优化存储管理卡片布局对齐
前端优化:
- 使用 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 |
|
 19174616018andClaude
|
e132fa1d2d
|
🐛 修复用户信息同步时机问题
前端修复:
- 在检测存储配置更新前,先同步完整的用户信息
- 确保 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 |
|
 19174616018andClaude
|
2861b652db
|
💄 优化存储配置提示逻辑
前端优化:
- 新增 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 |
|
 19174616018andClaude
|
1ff5198bdf
|
💄 优化文件下载体验
前端优化:
- 统一文件下载逻辑,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 |
|
 19174616018andClaude
|
7f91f3afd5
|
🐛 修复邮件验证链接兼容性问题
前端优化:
- 新增 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 |
|
 19174616018andClaude
|
9447ef8eea
|
🔒 增强安全防护:防止 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 |
|
 19174616018andClaude
|
2a1f13c335
|
✨ 优化 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 |
|
 19174616018andClaude
|
af9d2f48ce
|
📝 重写 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 |
|
 19174616018andClaude
|
82ddb0ab27
|
🔥 移除旧密码重置审核系统 & ✨ 优化存储管理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 |
|
 19174616018andClaude
|
5a190127fc
|
✨ 优化邮件验证和密码重置链接
- 修改邮件中的验证和重置链接,直接指向 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 |
|
 19174616018andClaude
|
50e714b2dd
|
🐛 修复邮箱验证和密码重置的时间戳问题
后端修复:
- 修改时间戳存储格式:从 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 |
|
 19174616018andClaude
|
58e6bf01cc
|
🔧 优化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 |
|
 19174616018andClaude
|
40fe89bfb7
|
✨ 增强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 |
|
 19174616018andClaude
|
9d353b3f77
|
🔧 改进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 |
|
 19174616018andClaude
|
f5cb6a6adf
|
🐛 修复邮件发送功能的小问题
- 修复发件人字段处理,避免空字符串导致发送失败
- 改进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 |
|
 19174616018andClaude
|
e442d1983b
|
✉️ 添加完整的邮件系统功能
后端新增功能:
- 集成 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 |
|
 19174616018andClaude
|
bd00b30940
|
🚀 增强验证码安全性和防刷机制
- 添加验证码请求限流器(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 |
|
 19174616018andClaude
|
5026c4a9e1
|
🔧 改进反向代理和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 |
|
 19174616018andClaude
|
64e466873e
|
🔧 修复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 |
|
19174616018
|
fb00045f1e
|
📋 添加完整交接文档 - 验证码功能
|
2025-11-21 17:08:33 +00:00 |
|
19174616018
|
73840c76a2
|
📖 添加验证码快速修复指南
|
2025-11-21 17:05:22 +00:00 |
|
 19174616018andClaude
|
6a3741dc36
|
🔧 更新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配置 (28bd000)
- 前端axios配置 (c7e5bb5)
- nginx/nginx.conf (0c4a3ff)
- 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 |
|
 19174616018andClaude
|
0c4a3fff37
|
🐛 修复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配置修复 (28bd000)
- 前端axios withCredentials配置 (c7e5bb5)
- 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 |
|
 19174616018andClaude
|
10903b175a
|
🔄 更新前端版本号 - 强制刷新浏览器缓存
## 问题
浏览器缓存了旧版本的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 |
|
 19174616018andClaude
|
c7e5bb5a3b
|
🐛 修复验证码跨域Cookie传递问题
## 问题描述
验证码在生产环境(https://cs.workyai.cn)一直提示"验证码已过期"
## 根本原因
axios默认不携带credentials(包括cookies),导致:
1. 验证码生成时的session cookie无法被浏览器保存
2. 登录时无法读取到验证码session
3. SessionID不一致导致验证失败
## 修复方案
在mounted钩子中添加axios全局配置:
```javascript
axios.defaults.withCredentials = true;
```
这样所有axios请求都会携带cookies,包括:
- 验证码生成请求
- 登录验证请求
- 所有其他API请求
## 配合后端配置
后端已配置:
- CORS: credentials: true
- Session cookie: sameSite: 'lax'
- Session: saveUninitialized: true
## 测试说明
1. 清除浏览器Cookie
2. 访问 https://cs.workyai.cn
3. 输错密码2次触发验证码
4. 输入验证码应该能正常通过
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:42:37 +00:00 |
|
 19174616018andClaude
|
28bd0007f9
|
🐛 修复验证码Session问题 - 验证码过期Bug修复
## 问题描述
用户输入验证码后一直提示"验证码已过期"
## 根本原因
Session配置问题导致验证码无法正确保存和读取:
1. saveUninitialized: false 导致验证码请求时session不会被创建
2. 缺少 sameSite 属性导致某些情况下cookie无法正确传递
## 修复方案
### Session配置优化
- saveUninitialized: false → true (确保验证码请求时创建session)
- 添加 name: 'captcha.sid' (自定义session cookie名称)
- 添加 sameSite: 'lax' (防止CSRF同时确保同站请求携带cookie)
### 验证码生成API增强
- 添加 req.session.save() 确保session立即保存
- 添加调试日志输出SessionID和验证码内容
### 登录API调试
- 添加详细的验证码验证日志
- 输出SessionID、失败次数、验证码匹配情况
- 帮助快速定位问题
## 测试建议
1. 清除浏览器Cookie
2. 输错密码2次触发验证码
3. 查看后端日志确认SessionID一致
4. 输入正确验证码应该能通过验证
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:39:38 +00:00 |
|
 19174616018andClaude
|
96eed34366
|
✨ 添加登录验证码功能 - 增强系统安全性
## 新增功能
- 密码输错2次后自动显示验证码
- 4位数字验证码,点击可刷新
- 验证码有效期5分钟
- 基于IP和用户名双重防护
- 前台和后台登录均支持
## 后端改动
- 新增验证码生成API: GET /api/captcha
- 修改登录API支持验证码验证
- 添加session管理验证码
- 增强RateLimiter防爆破机制
## 前端改动
- 登录表单添加验证码输入框(条件显示)
- 验证码图片展示和刷新功能
- 自动触发验证码显示逻辑
## 依赖更新
- 新增: svg-captcha (验证码生成)
- 新增: express-session (session管理)
## 文档
- CAPTCHA_FEATURE.md - 详细功能文档
- CAPTCHA_README.md - 快速开始指南
- test_captcha.sh - 自动化测试脚本
- 更新说明_验证码功能.txt - 中文说明
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:32:32 +00:00 |
|
19174616018
|
6d02af66bf
|
🐛 修复分享页下载文件时页面闪动问题
- 问题:使用window.open()下载文件会导致页面短暂失焦,产生闪动效果
- 修复:改用隐藏的<a>标签触发下载,避免打开新标签页
- 新增triggerDownload()方法处理文件下载
- 影响文件:frontend/share.html (line 744-795)
|
2025-11-18 18:10:03 +08:00 |
|
19174616018
|
c9179437cd
|
🐛 修复文件夹分享bug - 只显示第一个文件的问题
问题:
- 分享文件夹时,分享链接只显示文件夹内第一个文件
- 原因:前端无论文件还是文件夹都使用share_type='file'
- 后端对非file类型的分享路径处理不正确
修复方案:
1. 前端修改(frontend/app.js):
- shareFileForm添加isDirectory字段标记是否为文件夹
- openShareFileModal设置isDirectory值
- createShareFile根据isDirectory设置正确的share_type
* 文件: share_type='file'
* 文件夹: share_type='directory'
2. 后端修改(backend/database.js):
- 修复ShareDB.create中的sharePath逻辑
- file类型:使用file_path(单文件路径)
- directory类型:使用file_path(文件夹路径)
- all类型:使用'/'(根目录)
测试:
- 分享单个文件:正常显示单个文件
- 分享文件夹:正常显示文件夹内所有文件
- 分享所有文件:正常显示根目录所有文件
|
2025-11-18 17:58:31 +08:00 |
|
19174616018
|
f935fefc54
|
🔒 修复CORS逻辑 - 正确处理同源请求
问题:
- 第一次修复过于严格,拒绝了所有无Origin头的请求
- 导致浏览器的同源请求被拒绝,网站完全无法使用
修复方案:
- 允许无Origin头的请求(同源请求不触发CORS)
- 严格验证带Origin头的跨域请求(必须在白名单中)
- 拒绝所有未授权的跨域请求
文件修改:
- backend/server.js: 修正CORS中间件逻辑(第48-63行)
测试:
- 同源请求正常工作
- 恶意跨域请求被拒绝
- API返回正确的状态码(不再是500错误)
|
2025-11-18 17:08:22 +08:00 |
|
 19174616018andClaude
|
56ba6edf3c
|
🔒 修复CORS严重安全漏洞 & 增强Nginx安全配置
## 关键修复
### 1. 修复backend/server.js的CORS漏洞 ⚠️ CRITICAL
**问题**: 原代码 `if (!origin || allowedOrigins.includes(origin))`
会允许所有没有Origin头的请求通过,导致恶意请求绕过CORS保护
**修复**: 严格白名单模式
```javascript
// 只允许白名单中的域名
if (origin && allowedOrigins.includes(origin)) {
callback(null, true);
} else {
// 拒绝所有其他请求
callback(new Error('CORS策略不允许来自该来源的访问'));
}
```
**影响**:
- ✅ 阻止所有恶意域名的跨域访问
- ✅ 保护JWT token不被窃取
- ✅ 从63.6%预计提升到90%+安全评分
### 2. 增强install.sh中的Nginx安全配置
在所有三个nginx配置函数中添加了完整的安全规则:
- `configure_nginx_http_first()` - 初始HTTP配置
- `configure_nginx_http()` - 纯HTTP模式
- `configure_nginx_https()` - HTTPS模式
**新增安全配置**:
```nginx
# 安全响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # HTTPS专用
# 隐藏Nginx版本
server_tokens off;
# 禁止访问隐藏文件 (.git, .env等)
location ~ /\. {
deny all;
return 404;
}
# 禁止访问敏感文件
location ~ \.(env|git|config|key|pem|crt|sql|bak|backup|old|log)$ {
deny all;
return 404;
}
```
**防护效果**:
- ✅ 阻止访问 /.env, /.git/config
- ✅ 阻止访问备份文件 .bak, .sql
- ✅ 防止点击劫持、XSS、MIME嗅探攻击
- ✅ 强制HTTPS(HTTPS环境下)
- ✅ 隐藏服务器信息
## 部署方法
在服务器上执行:
```bash
cd /var/www/wanwanyun
git pull origin master
bash install.sh --repair # 重新生成Nginx配置
# 或者手动
pm2 restart wanwanyun-backend
nginx -t && systemctl reload nginx
```
然后运行安全测试验证:
```bash
node security-test.js
```
预期改进:
- CORS测试: 只有cs.workyai.cn被允许 ✅
- 敏感文件: 全部返回404 ✅
- 安全响应头: 全部检测到 ✅
- 安全评分: 63.6% → 90%+ 🎯
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-18 16:58:19 +08:00 |
|
 19174616018andClaude
|
c81266ae0e
|
🛡️ 添加更新时的安全配置自动检查和修复
解决了使用install.sh更新时,旧的不安全CORS配置仍然保留的问题。
## 新增功能
### 自动安全配置检查
更新时会自动检查 backend/.env 中的安全配置:
1. **CORS配置检查**
- 检测 ALLOWED_ORIGINS=* (不安全)
- 自动从Nginx配置读取域名
- 自动检测HTTP/HTTPS协议
- 提示用户确认并自动修复
2. **环境变量检查**
- 检查NODE_ENV是否设置为production
- 给出安全建议
### 工作流程
当执行 `bash install.sh --update` 时:
```bash
检查安全配置...
⚠️ 检测到不安全的CORS配置: ALLOWED_ORIGINS=*
这是一个严重的安全风险!攻击者可以从任何域名访问你的API。
检测到域名: cs.workyai.cn
建议将CORS设置为: https://cs.workyai.cn
是否自动修复CORS配置?[y/n]:
```
### 修复机制
- ✅ 自动备份原配置到 .env.backup.YYYYMMDD_HHMMSS
- ✅ 智能检测HTTP/HTTPS
- ✅ 从Nginx配置读取域名
- ✅ 用户确认后自动修改
- ✅ 如果无法自动修复,给出手动修复指引
### 兼容性
- ✅ 不影响安全的现有配置
- ✅ 只修复明确不安全的配置(ALLOWED_ORIGINS=*)
- ✅ 提供备份,可随时回滚
## 使用方法
```bash
# 更新项目(会自动检查安全配置)
bash install.sh --update
# 或者使用交互式菜单
bash install.sh
# 选择 [2] 更新/升级
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-18 16:37:39 +08:00 |
|
 19174616018andClaude
|
dc6d801aeb
|
🔒 重大安全更新:修复CORS、XSS、敏感文件暴露等漏洞
本次更新修复了安全测试中发现的所有严重问题,大幅提升系统安全性。
## 修复的安全问题
### 1. CORS跨域配置漏洞 ⚠️ 严重
**问题**: 默认允许所有域名访问(ALLOWED_ORIGINS=*)
**修复**:
- 默认值改为空数组,生产环境必须明确配置域名白名单
- 未配置时拒绝所有跨域请求(生产环境)
- 开发环境仅允许localhost访问
### 2. XSS跨站脚本攻击 ⚠️ 严重
**问题**: 用户输入未过滤,可注入恶意脚本
**修复**:
- 添加XSS过滤中间件,自动转义所有POST/PUT请求的用户输入
- 过滤 <, >, ', " 等危险字符
- 递归处理嵌套对象和数组
### 3. 缺少安全响应头 ⚠️ 重要
**问题**: 缺少X-Frame-Options等安全响应头
**修复**:
- X-Frame-Options: SAMEORIGIN (防止点击劫持)
- X-Content-Type-Options: nosniff (防止MIME嗅探)
- X-XSS-Protection: 1; mode=block
- Strict-Transport-Security (HTTPS环境)
- Content-Security-Policy (内容安全策略)
- 隐藏X-Powered-By和Server版本信息
### 4. 敏感文件暴露风险 ⚠️ 严重
**问题**: .env、.git等敏感文件可能被访问
**修复**:
- Nginx配置禁止访问以.开头的隐藏文件
- 禁止访问.env、.git、.config、.key、.pem等敏感文件
- 更新.gitignore,防止敏感文件提交到代码仓库
- 添加证书、密钥等文件类型到忽略列表
## 代码改动
### backend/server.js
- 修改CORS默认配置,移除危险的 * 通配符
- 添加安全响应头中间件
- 添加XSS过滤中间件(sanitizeInput函数)
- 生产环境强制检查ALLOWED_ORIGINS配置
### nginx/nginx.conf
- 添加安全响应头配置
- 禁止访问隐藏文件和敏感文件的location规则
- 隐藏Nginx版本号(server_tokens off)
### .gitignore
- 添加敏感配置文件保护(.env.local, config.json等)
- 添加证书和密钥文件类型(.key, .pem, .crt等)
### deploy.sh
- 修改默认配置,移除ALLOWED_ORIGINS=*
- 添加安全警告提示
## 部署说明
⚠️ **重要**: 更新后必须配置ALLOWED_ORIGINS环境变量!
### 手动部署
编辑 `backend/.env` 文件:
```bash
ALLOWED_ORIGINS=https://cs.workyai.cn
NODE_ENV=production
```
### 使用install.sh部署
脚本会自动根据域名配置ALLOWED_ORIGINS
## 测试结果
修复前安全评分: 57.6% (14个安全问题)
修复后预期评分: 90%+ (预计解决12+个问题)
## 兼容性
- ✅ 向后兼容,不影响现有功能
- ✅ 开发环境自动允许localhost访问
- ⚠️ 生产环境必须配置ALLOWED_ORIGINS(否则无法访问)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-18 16:29:44 +08:00 |
|
 19174616018andClaude
|
9f7abd498e
|
优化检测逻辑,减少误判
修复了正常访问时也提示"检测到开发者工具"的问题。
核心改进:
1. 提高检测阈值,避免误判
- 窗口尺寸差异从160px提高到200px
- 要求console和其他方法同时检测到才触发
2. 降低检测频率
- 从每1秒改为每2秒检测一次
- 减少性能消耗和误判概率
3. 严格判定条件
- console检测为主要依据
- debugger和窗口尺寸作为辅助确认
检测逻辑:
- consoleOpen && (debuggerPause || windowSizeAbnormal)
- 必须console明确检测到,且至少有一个辅助条件满足
说明:
前端防护无法完全阻止技术人员查看源代码(Network面板、
右键查看源代码等),但可以有效防止普通用户使用F12。
真正的安全依赖于后端验证和权限控制。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 21:01:57 +08:00 |
|
 19174616018andClaude
|
f2899038b0
|
终极防护:在页面渲染前检测开发者工具
解决了用户打开控制台后能看到源代码的问题。
核心改进:
1. 将检测代码移到<head>最前面,在页面渲染前执行
2. 使用document.write()立即阻止页面加载
3. 检测到开发者工具时throw Error阻止后续脚本
4. 删除底部重复的检测代码,统一在头部处理
5. 优化检测逻辑,使用console.log触发toString
工作原理:
- 页面加载第一时间就执行检测
- 如果检测到开发者工具,立即用document.write替换页面
- throw Error阻止后续所有脚本和Vue应用加载
- 用户无法看到真实页面内容和源代码
测试场景:
✅ 先打开F12再访问 → 立即显示警告,页面不加载
✅ 访问后按F12 → 快捷键被禁用
✅ 调试模式 → 所有保护自动禁用
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 20:40:13 +08:00 |
|
 19174616018andClaude
|
d0868e6cbf
|
重构开发者工具检测机制 - 使用多重检测方法
修复了控制台在其他页面打开后仍能在本站显示的问题。
核心改进:
1. 新增Console对象toString检测(最有效)
2. 优化debugger暂停时间检测
3. 保留窗口尺寸检测作为补充
4. 综合多种方法,提高检测准确率
5. 页面加载时立即执行检测
6. 持续监控确保实时防护
检测原理:
- console.log会触发对象的toString方法
- 当控制台打开时,这个方法会被调用
- 通过标志位检测到调用,即可判断控制台已打开
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 20:33:01 +08:00 |
|
 19174616018andClaude
|
e24a897120
|
增强开发者工具检测防护功能
修复了用户可以在其他页面先打开F12控制台,然后访问网站时绕过禁用的问题。
主要改进:
- 页面加载时立即检测开发者工具是否已打开
- 新增 debugger 断点检测机制,检测更灵敏
- 检测到开发者工具时显示美观的全屏警告页面
- 防止重复警告显示
- 调试模式下所有保护机制自动禁用
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 19:57:02 +08:00 |
|
19174616018
|
b2e6c7fe7c
|
删除文件 test_rate_limit.sh
|
2025-11-14 17:28:12 +00:00 |
|
19174616018
|
0521687f89
|
删除文件 test_share_security.sh
|
2025-11-14 17:28:05 +00:00 |
|
 19174616018andClaude
|
a41a29d581
|
fix: 分享详情页显示到期时间
问题:
- 分享列表中显示的到期时间正确
- 但点进分享详情页时,到期时间只显示"永久有效"
原因:
- /api/share/:code/verify 接口返回的 share 对象中缺少 expires_at 字段
- 前端 shareInfo.expires_at 为 undefined,导致始终显示"永久有效"
修复:
- 在 server.js:1650 添加 expires_at 到响应数据中
- 现在分享详情页能正确显示到期时间
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 20:59:48 +08:00 |
|
 19174616018andClaude
|
f02bcee646
|
fix: 彻底修复所有表格和列表的文字溢出问题
关键修复:
1. 所有表格添加 table-layout: fixed
2. 表格列头添加明确的宽度百分比控制
3. 文件列表 - 修复 display: flex 导致的溢出
- 将 flex 从 td 移到内部 div
- 文件名使用 flex: 1 + min-width: 0
- 所有图标添加 flex-shrink: 0
4. 分享列表 - 移除 max-width,使用列头宽度控制
5. 用户列表 - 移除 max-width,使用列头宽度控制
所有表格现在都能正确处理长文本,不会溢出容器
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 20:30:22 +08:00 |
|
 19174616018andClaude
|
d99568e418
|
fix: 修复前端所有页面的文字溢出问题
修复内容:
1. 文件列表 - 列表视图文件名溢出控制
2. 用户列表 - 用户名和邮箱溢出控制
3. 分享列表 - 文件路径和分享链接溢出控制
所有长文本现在都会正确显示省略号,不会导致UI布局异常
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 19:47:36 +08:00 |
|
 19174616018andClaude
|
f9d0a30d46
|
fix: 修复移动端分享列表长文件名导致UI溢出问题
## 问题
在移动端"我的分享"的列表视图下,长文件名会导致:
- 表格宽度被撑开
- 分享链接等内容溢出到容器外
- 页面布局错乱
## 修复
为分享列表的表格添加文字溢出处理:
1. 文件路径列:
- 限制max-width: 200px
- 超出部分显示省略号(text-overflow: ellipsis)
- 鼠标悬停显示完整路径(title属性)
2. 分享链接列:
- 限制max-width: 250px
- 超出部分显示省略号
- 鼠标悬停显示完整链接
## 其他位置检查
- 大图标视图已有溢出处理(-webkit-line-clamp: 2),无需修改
- 文件列表视图也已有完善的溢出处理
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 17:12:15 +08:00 |
|
 19174616018andClaude
|
8cda4c1a0b
|
fix: 修复时区问题 - 使用本地时区存储和比较时间
## 问题
- 之前使用UTC时间存储expires_at
- 前端解析时当成本地时间,导致显示时间差8小时
- 例如: 数据库存 08:37 (UTC),前端显示 08:37 (本地),实际应该显示 16:37
## 修复
1. database.js create方法: 使用本地时区格式化时间
- 使用 getFullYear/getMonth/getDate 等获取本地时间
- 格式化为 YYYY-MM-DD HH:MM:SS (本地时间)
2. database.js findByCode方法: 使用本地时区比较
- 改为 datetime('now', 'localtime')
- 确保与存储的本地时间格式匹配
3. 调试日志也使用本地时区
## 效果
- 创建分享时,expires_at存储的是服务器本地时间
- 前端显示时间与服务器时间一致
- 过期判断使用本地时区,结果正确
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 16:46:26 +08:00 |
|
 19174616018andClaude
|
d56388dd29
|
fix: 修复分享过期时间格式导致的过滤失败问题
## 问题分析
通过调试日志发现,过期分享仍能访问的根本原因是:
- expires_at 存储格式: `2025-11-14T07:31:31.922Z` (ISO 8601)
- datetime('now') 返回格式: `2025-11-14 08:19:52` (SQLite格式)
- SQLite进行字符串比较时: 'T' (ASCII 84) > ' ' (ASCII 32)
- 导致条件 `expires_at > datetime('now')` 对已过期分享仍返回true
## 修复内容
1. database.js: 修改create方法,将expires_at转换为SQLite datetime格式
- 旧格式: 2025-11-14T07:31:31.922Z
- 新格式: 2025-11-14 07:31:31
2. fix_expires_at_format.js: 数据库修复脚本
- 将已存在的ISO格式时间转换为SQLite格式
- 确保历史数据也能正确过滤
## 部署步骤
```bash
cd /var/www/wanwanyun
git pull
cd backend
node fix_expires_at_format.js # 修复历史数据
pm2 restart wanwanyun-backend # 重启服务
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 16:25:31 +08:00 |
|