喻勇祥 32429334ab 🔒 重大安全更新:修复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
2025-11-13 23:13:24 +08:00

玩玩云 - 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

访问系统

部署完成后:

📖 使用教程

配置SFTP服务器

首次使用需要配置SFTP连接信息

  1. 登录后点击右上角用户菜单

  2. 选择"设置"

  3. 填写SFTP配置

    • SFTP主机: 您的SFTP服务器IP
    • SFTP端口: 默认22
    • SFTP用户名: SFTP账号
    • SFTP密码: SFTP密码
    • HTTP下载基础URL(可选): 如果有HTTP直接下载地址
  4. 点击"保存配置"

文件管理

  • 浏览文件: 点击文件夹图标进入子目录
  • 上传文件: 点击"上传文件"按钮选择本地文件
  • 下载文件: 点击文件行的下载按钮
  • 重命名: 点击"重命名"按钮修改文件名
  • 删除: 点击"删除"按钮删除文件

文件分享

  1. 点击文件行的"分享"按钮
  2. 设置分享选项:
    • 分享密码(可选)
    • 有效期(可选)
  3. 复制分享链接发送给他人

🔧 维护操作

查看日志

# 查看所有日志
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

🔐 安全建议

  1. 修改默认密码: 首次登录后立即修改admin密码
  2. 使用HTTPS: 配置SSL证书使用HTTPS访问
  3. 修改JWT密钥: 在backend/.env文件中设置随机的JWT_SECRET
  4. 定期备份: 定期备份数据库文件
  5. 限制端口: 不要对外暴露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
No description provided
Readme 17 MiB
Languages
JavaScript 74.5%
HTML 14.9%
Shell 10.5%