Skip to content

[Security] 安全漏洞修复合集(6项 Critical/High)#494

Closed
lichangfeng-1 wants to merge 1 commit into
vastsa:masterfrom
lichangfeng-1:fix/security-patches
Closed

[Security] 安全漏洞修复合集(6项 Critical/High)#494
lichangfeng-1 wants to merge 1 commit into
vastsa:masterfrom
lichangfeng-1:fix/security-patches

Conversation

@lichangfeng-1

Copy link
Copy Markdown

对 FileCodeBox 进行代码审计后,发现并修复了以下安全问题。所有修复向后兼容,不影响现有功能。

修复清单

🔴 Critical(3项)

  • SEC-002: share_text 缺少 expire_style 白名单校验,可绕过管理员过期策略
  • SEC-003: complete_upload 同样缺少校验
  • SEC-004: CORS allow_origins=["*"] + allow_credentials=True 冲突(同源部署无需凭证跨域)

🟠 High(3项)

  • BUG-001: quota.py SQL 写死 ? 占位符,PostgreSQL/MySQL 下配额功能静默失效
  • BUG-002: 下载 Token 时间窗口边界竞态,窗口末尾获取的 Token 偶发失效
  • BUG-003: S3/OneDrive/WebDAV 下载时客户端中断后 aiohttp session 未关闭,连接泄漏

兼容性

  • ✅ 不改变任何 API 接口签名
  • ✅ 不影响现有配置
  • ✅ 支持 SQLite / PostgreSQL / MySQL
  • ✅ 兼容 CLI(curl/wget)操作

… 白名单校验 - SEC-003: complete_upload 添加 expire_style 校验 - SEC-004: CORS allow_credentials=False - BUG-001: SQL占位符多数据库兼容 - BUG-002: Token窗口竞态修复 - BUG-003: session泄漏修复
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

@lichangfeng-1 is attempting to deploy a commit to the vastsa's projects Team on Vercel.

A member of the Team first needs to authorize it.

@vastsa

vastsa commented Jul 23, 2026

Copy link
Copy Markdown
Owner

感谢 @lichangfeng-1 的审计和修复提交,方向整体正确,问题定位很有价值 👍

我在本地 review 后,基于本 PR 的思路整理并提交了增强版:#496

Review 结论摘要

可直接认可

  • share_text / complete_uploadexpire_style 白名单:有效,属于真实策略绕过缺口
  • 下载 token 兼容上一时间窗:能修边界竞态,方案合理
  • CORS allow_origins=["*"] + allow_credentials=True:确实不合规范,关掉 credentials 对当前 Bearer 前端是合理修正
  • 远程下载 session.close 兜底:有益,原 generator finally 已有关闭逻辑,双保险可接受

建议修正

  1. BUG-001 实现需改
    getattr(conn, "engine", "") 在 Tortoise connection 上通常拿不到有效值。
    更稳妥:
    • 优先 conn.capabilities.dialectsqlite / postgres / mysql
    • 回退 connections.db_config["default"]["engine"]
  2. 严重级别建议下调
    更像 Medium/Low-Medium 的策略绕过与健壮性修复,不完全是 6 项 Critical/High。
  3. 建议抽公共校验
    多处手写 if expire_style not in settings.expireStyle 后续仍可能漏检。
  4. 建议补测试
    至少覆盖白名单拒绝、token 上一窗口仍可下载、sqlite 下 quota SQL 回归。

后续

增强版实现与测试见:#496
如果方便,也欢迎你直接在 #494 上吸收上述修正;两边目标一致,核心都是把这些修复稳妥合入主线。

@vastsa

vastsa commented Jul 23, 2026

Copy link
Copy Markdown
Owner

已处理完毕。

本 PR 的有效修复已由增强版 #496 合入主线(含 dialect 探测修正、统一 expire_style 校验与回归测试)。

为避免重复改动与分叉维护,这里关闭 #494
再次感谢 @lichangfeng-1 的安全审计与首轮补丁 🙏

@vastsa

vastsa commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Superseded by #496 (merged). 有效修复已合入主线,关闭本 PR 以避免重复。

@vastsa vastsa closed this Jul 23, 2026
pull Bot pushed a commit to CN0579/FileCodeBox that referenced this pull request Jul 23, 2026
Apply the useful security fixes from PR vastsa#494 with review corrections:
validate expire_style through a shared helper, accept previous download
token window, detect SQL dialect via Tortoise capabilities, close remote
download sessions on client abort, and disable invalid CORS credentials.
@lichangfeng-1

Copy link
Copy Markdown
Author

感谢采纳,很高兴有帮助 🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants