e026c13fd3736e3b2a5266fe0d2567ba1ff09063
## 关键修复 ### 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>
玩玩云 - Web SFTP 文件管理系统
一个基于Web的SFTP文件管理系统,提供文件上传、下载、分享等功能,支持多用户管理。
📋 项目简介
玩玩云是一个现代化的Web文件管理系统,让您可以通过浏览器管理SFTP服务器上的文件。系统支持文件的上传、下载、重命名、删除、分享等操作,并提供桌面端上传工具,方便快速上传大文件。
主要特性
- ✅ 文件管理 - 浏览、上传、下载、重命名、删除文件
- ✅ 文件分享 - 生成分享链接,支持密码保护和有效期设置
- ✅ 多用户系统 - 用户注册、登录、权限管理
- ✅ 桌面上传工具 - 拖拽上传,实时显示进度
- ✅ 流式下载 - 服务器零存储,纯中转下载
- ✅ 管理员功能 - 用户管理、文件审查、系统设置
- ✅ Docker部署 - 一键部署,易于维护
🛠️ 技术栈
前端
- Vue.js 3 - 渐进式JavaScript框架
- Axios - HTTP请求库
- Font Awesome - 图标库
后端
- Node.js 20 - JavaScript运行时
- Express - Web应用框架
- better-sqlite3 - 轻量级数据库
- ssh2-sftp-client - SFTP客户端
- JWT - 用户认证
部署
- Docker - 容器化
- Docker Compose - 容器编排
- Nginx - 反向代理
🚀 快速开始
环境要求
- Docker: 20.10.0+
- Docker Compose: 2.0.0+
- 操作系统: Linux (Ubuntu 20.04+ / Debian 10+ / CentOS 7+)
- 内存: 最低 1GB RAM(推荐 2GB+)
方法1: 一键部署(推荐)
# 1. 上传或克隆项目
cd /var/www
# 将项目文件上传到此目录
# 2. 进入项目目录
cd ftp-web-manager
# 3. 一键部署
bash deploy.sh
deploy.sh脚本会自动:
- 检查Docker和Docker Compose环境
- 创建必要的目录
- 构建并启动所有服务
- 显示访问信息和默认账号
方法2: 手动部署
# 1. 进入项目目录
cd /var/www/ftp-web-manager
# 2. 创建必要的目录
mkdir -p certbot/conf certbot/www backend/uploads
# 3. 构建并启动服务
docker-compose up --build -d
# 4. 查看日志
docker-compose logs -f
访问系统
部署完成后:
- 前端地址: http://服务器IP:8080
- 后端API: http://服务器IP:40001
- 默认管理员账号:
- 用户名:
admin - 密码:
admin123 - ⚠️ 请立即登录并修改密码!
- 用户名:
📖 使用教程
配置SFTP服务器
首次使用需要配置SFTP连接信息:
-
登录后点击右上角用户菜单
-
选择"设置"
-
填写SFTP配置:
- SFTP主机: 您的SFTP服务器IP
- SFTP端口: 默认22
- SFTP用户名: SFTP账号
- SFTP密码: SFTP密码
- HTTP下载基础URL(可选): 如果有HTTP直接下载地址
-
点击"保存配置"
文件管理
- 浏览文件: 点击文件夹图标进入子目录
- 上传文件: 点击"上传文件"按钮选择本地文件
- 下载文件: 点击文件行的下载按钮
- 重命名: 点击"重命名"按钮修改文件名
- 删除: 点击"删除"按钮删除文件
文件分享
- 点击文件行的"分享"按钮
- 设置分享选项:
- 分享密码(可选)
- 有效期(可选)
- 复制分享链接发送给他人
🔧 维护操作
查看日志
# 查看所有日志
docker-compose logs -f
# 查看后端日志
docker-compose logs -f backend
重启服务
# 重启所有容器
docker-compose restart
# 重启指定容器
docker-compose restart backend
停止服务
docker-compose down
备份数据
# 备份数据库
cp backend/ftp-manager.db backup/ftp-manager.db.$(date +%Y%m%d)
# 备份整个项目
tar -czf backup/wanwanyun-$(date +%Y%m%d).tar.gz .
更新代码
# 拉取最新代码
git pull
# 重新构建并重启
docker-compose up --build -d
🔐 安全建议
- 修改默认密码: 首次登录后立即修改admin密码
- 使用HTTPS: 配置SSL证书,使用HTTPS访问
- 修改JWT密钥: 在backend/.env文件中设置随机的JWT_SECRET
- 定期备份: 定期备份数据库文件
- 限制端口: 不要对外暴露40001端口,只通过Nginx访问
❓ 常见问题
Docker容器启动失败
# 查看日志
docker-compose logs backend
# 重新构建
docker-compose down
docker-compose up --build -d
上传失败提示权限错误
检查SFTP服务器目录权限,确保上传目录有写权限。
分享链接无法访问
检查nginx配置和防火墙设置,确保端口8080可访问。
📁 项目结构
ftp-web-manager/
├── backend/ # 后端代码
│ ├── server.js # 主服务器文件
│ ├── database.js # 数据库操作
│ ├── auth.js # 认证中间件
│ ├── Dockerfile # Docker镜像
│ └── package.json # 依赖配置
│
├── frontend/ # 前端代码
│ ├── index.html # 登录页面
│ ├── app.html # 主应用页面
│ ├── share.html # 分享页面
│ └── libs/ # 第三方库
│
├── nginx/ # Nginx配置
│ └── nginx.conf # 配置文件
│
├── upload-tool/ # 上传工具
│ ├── upload_tool.py # Python源码
│ └── build.bat # 打包脚本
│
├── docker-compose.yml # Docker编排
├── deploy.sh # 一键部署脚本
├── .gitignore # Git忽略文件
└── README.md # 本文件
🤝 贡献指南
欢迎提交Issue和Pull Request!
📄 许可证
本项目仅供学习和个人使用。
玩玩云 - 让文件管理更简单 ☁️
Description
Languages
JavaScript
74.5%
HTML
14.9%
Shell
10.5%