# 安全设置 FileCodeBox 提供了多层安全机制来保护您的文件分享服务。本文档介绍如何正确配置安全选项,确保系统安全运行。 ## 管理员密码 ### 修改默认密码 ::: danger 重要安全警告 FileCodeBox 的默认管理员密码是 `FileCodeBox2023`。**在生产环境中必须立即修改此密码!**使用默认密码会导致任何人都可以访问您的管理面板。 ::: 修改管理员密码有两种方式: **方式一:通过管理面板修改(推荐)** 1. 访问 `/admin` 进入管理面板 2. 使用当前密码登录 3. 进入「系统设置」页面 4. 找到 `admin_token` 配置项 5. 输入新的安全密码并保存 **方式二:通过数据库修改** 配置存储在 `data/filecodebox.db` 数据库的 `keyvalue` 表中,可以直接修改 `admin_token` 的值。 ### 密码安全建议 - 使用至少 16 个字符的强密码 - 包含大小写字母、数字和特殊字符 - 避免使用常见词汇或个人信息 - 定期更换密码 ```python # 推荐的密码格式示例 "admin_token": "Xk9#mP2$vL5@nQ8&wR3" ``` ### 隐藏管理入口 默认情况下,管理面板入口是隐藏的。您可以通过 `showAdminAddr` 配置控制是否在首页显示管理入口: | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `showAdminAddr` | int | `0` | 是否显示管理入口(1=显示,0=隐藏) | ::: tip 建议 在公开服务中,建议保持 `showAdminAddr` 为 `0`,通过直接访问 `/admin` 路径进入管理面板。 ::: ## IP 速率限制 FileCodeBox 内置了基于 IP 的速率限制机制,可以有效防止滥用和攻击。 ### 上传频率限制 限制单个 IP 在指定时间内的上传次数: | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `uploadMinute` | int | `1` | 上传限制的时间窗口(分钟) | | `uploadCount` | int | `10` | 在时间窗口内允许的最大上传次数 | **工作原理:** - 系统记录每个 IP 的上传请求 - 当某 IP 在 `uploadMinute` 分钟内的上传次数达到 `uploadCount` 时 - 该 IP 的后续上传请求将被拒绝,返回 HTTP 423 错误 - 等待时间窗口过期后,计数器重置 **配置示例:** ```python # 宽松配置:5分钟内最多上传20次 { "uploadMinute": 5, "uploadCount": 20 } # 严格配置:1分钟内最多上传3次 { "uploadMinute": 1, "uploadCount": 3 } ``` ### 错误次数限制 限制单个 IP 的错误尝试次数,防止暴力破解提取码: | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `errorMinute` | int | `1` | 错误限制的时间窗口(分钟) | | `errorCount` | int | `1` | 在时间窗口内允许的最大错误次数 | **工作原理:** - 当用户输入错误的提取码时,系统记录该 IP 的错误次数 - 当错误次数达到 `errorCount` 时,该 IP 将被暂时锁定 - 锁定时间为 `errorMinute` 分钟 - 锁定期间,该 IP 的所有提取请求都将被拒绝 **配置示例:** ```python # 防暴力破解配置:5分钟内最多允许3次错误 { "errorMinute": 5, "errorCount": 3 } ``` ::: warning 注意 默认配置 `errorMinute=1, errorCount=1` 非常严格,意味着输入一次错误的提取码后需要等待1分钟才能重试。根据实际需求调整此配置。 ::: ## 上传限制 ### 文件大小限制 | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `uploadSize` | int | `10485760` | 单文件最大上传大小(字节),默认 10MB | | `openUpload` | int | `1` | 是否开启上传功能(1=开启,0=关闭) | **常用大小换算:** - 10MB = 10 * 1024 * 1024 = `10485760` - 50MB = 50 * 1024 * 1024 = `52428800` - 100MB = 100 * 1024 * 1024 = `104857600` - 1GB = 1024 * 1024 * 1024 = `1073741824` ### 文件过期设置 通过文件过期机制,可以自动清理过期文件,减少存储占用和安全风险: | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `expireStyle` | list | `["day","hour","minute","forever","count"]` | 可选的过期方式 | | `max_save_seconds` | int | `0` | 文件最大保存时间(秒),0 表示不限制 | **过期方式说明:** - `day` - 按天数过期 - `hour` - 按小时过期 - `minute` - 按分钟过期 - `forever` - 永不过期(需要字符串提取码) - `count` - 按下载次数过期 **安全建议:** 对于公开服务,建议: 1. 移除 `forever` 选项,避免文件永久存储 2. 设置 `max_save_seconds` 限制最长保存时间 3. 优先使用 `count` 方式,下载后自动删除 ```python # 公开服务推荐配置 { "expireStyle": ["hour", "minute", "count"], "max_save_seconds": 86400 # 最长保存1天 } ``` ### 关闭上传功能 在某些情况下,您可能需要临时关闭上传功能: ```python { "openUpload": 0 # 关闭上传功能 } ``` ## 反向代理安全配置 在生产环境中,通常会使用 Nginx 或其他反向代理服务器。以下是安全配置建议: ### Nginx 配置示例 ```nginx server { listen 80; server_name your-domain.com; # 强制 HTTPS 重定向 return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; # SSL 证书配置 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; # 安全头部 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 Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 限制请求体大小(与 uploadSize 配置一致) client_max_body_size 100M; # 传递真实 IP location / { proxy_pass http://127.0.0.1:12345; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 静态资源缓存 location /assets { proxy_pass http://127.0.0.1:12345; proxy_cache_valid 200 7d; add_header Cache-Control "public, max-age=604800"; } } ``` ### 关键安全配置说明 **1. 传递真实 IP** FileCodeBox 的 IP 限制功能依赖于获取客户端真实 IP。系统会按以下顺序获取 IP: 1. `X-Real-IP` 请求头 2. `X-Forwarded-For` 请求头 3. 直接连接的客户端 IP 确保反向代理正确设置这些头部: ```nginx proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ``` **2. 请求体大小限制** Nginx 的 `client_max_body_size` 应该与 FileCodeBox 的 `uploadSize` 配置一致或略大: ```nginx client_max_body_size 100M; # 允许上传最大 100MB ``` **3. HTTPS 加密** 强烈建议在生产环境中启用 HTTPS: - 保护用户上传的文件内容 - 保护管理员登录凭据 - 防止中间人攻击 ### Caddy 配置示例 ```nginx your-domain.com { reverse_proxy localhost:12345 header { X-Frame-Options "SAMEORIGIN" X-Content-Type-Options "nosniff" X-XSS-Protection "1; mode=block" Strict-Transport-Security "max-age=31536000; includeSubDomains" } } ``` ## 安全检查清单 部署 FileCodeBox 前,请确认以下安全配置: - [ ] 已修改默认管理员密码 `admin_token` - [ ] 已隐藏管理入口 `showAdminAddr: 0` - [ ] 已配置合适的上传频率限制 - [ ] 已配置错误次数限制防止暴力破解 - [ ] 已设置合理的文件大小限制 - [ ] 已配置文件过期策略 - [ ] 已启用 HTTPS 加密 - [ ] 反向代理已正确传递真实 IP - [ ] 已设置安全响应头部 ## 推荐安全配置 ### 公开服务配置 ```python { "admin_token": "your-very-secure-password", "showAdminAddr": 0, "uploadSize": 10485760, # 10MB "uploadMinute": 1, "uploadCount": 5, "errorMinute": 5, "errorCount": 3, "expireStyle": ["hour", "minute", "count"], "max_save_seconds": 86400, # 最长1天 "openUpload": 1 } ``` ### 内部服务配置 ```python { "admin_token": "internal-secure-password", "showAdminAddr": 1, "uploadSize": 104857600, # 100MB "uploadMinute": 5, "uploadCount": 50, "errorMinute": 1, "errorCount": 5, "expireStyle": ["day", "hour", "forever"], "max_save_seconds": 0, # 不限制 "openUpload": 1 } ``` ## 下一步 - [配置说明](/guide/configuration) - 了解所有配置选项 - [存储配置](/guide/storage) - 配置安全的存储后端 - [文件分享](/guide/share) - 了解文件分享功能