对 nexus_system.zip 全量解压后逐文件审查。核心结论:提交物为一个近乎空白的 FastAPI 脚手架,而非可运行的管理系统;现有 46 行代码中仍存在 6 项应处理的问题。
30MB 的压缩包里,真正的代码只有 3 个文件、共 46 行,其余 103MB 全是 venv。app/models/、app/routes/、app/services/ 三个目录全空,没有入口文件、路由、模型、认证、前端或数据库。所谓"漏洞审计"目前无对象可审——疑似打包时漏传了真正的代码。下方列出的是就现有骨架已能确认的问题。
签名密钥以明文写死在 .env,而 .env 直接被打进了 zip。任何拿到包的人都知道你的密钥。依赖里已装 python-jose,一旦上线做 JWT,攻击者可自行签发任意用户的合法 token——等于门锁配了把公开的钥匙。config.py 里还有一份默认弱密钥兜底,更易被忽略。
密钥运行时从环境注入,绝不入库/入包;.env 加入 .gitignore 且不进制品;用 secrets.token_urlsafe(48) 生成高熵值;移除代码里的默认密钥,缺失时直接启动失败而非退回弱值。
# 生成 python -c "import secrets;print(secrets.token_urlsafe(48))" # config.py — 无默认值,缺失即报错 SECRET_KEY: str # 不给默认;Settings 缺失时抛错
配置、数据库(sqlite:////root/…)、上传目录全部落在 /root 下,表明服务以 root 运行。Web 进程一旦被攻破(尤其后续要加文件上传),攻击者直接拿到 root,危害从"应用沦陷"升级为"整机沦陷"。
建专用低权用户(如 nexus),代码与数据迁到 /opt/nexus 或 /srv/nexus;systemd 单元里设 User=nexus、ProtectSystem=strict、NoNewPrivileges=true;上传目录挂 noexec。
DEBUG 在 .env 和 config.py 默认值双重开启。它会把 create_async_engine(echo=DEBUG) 打开——所有 SQL(含参数)全量写日志,并使框架吐出详细报错堆栈,泄露表结构、路径与内部实现,为进一步攻击提供地图。
默认改为 DEBUG=False,仅本地开发显式开启;echo 与 DEBUG 解耦,生产恒关;错误响应统一走脱敏处理,不外泄堆栈。
extra = "allow" 让任何环境变量都能悄悄注入 Settings 对象。配置面失控:拼写错误不报错、非预期变量被静默吸收,也扩大了通过环境注入影响行为的面。
改为 extra = "forbid",所有配置项显式声明并带类型;需要的字段一个个列出来,让未知项在启动时暴露。
当前 get_db 在每次请求结束都 commit(),即使是只读请求也提交。接入写操作后,容易在未预期的位置产生隐式提交,难以精确控制事务边界。
依赖只负责给 session 与回滚兜底,提交交给业务层显式 await db.commit();只读路径完全不提交。事务边界清晰、可控。
依赖清单显示计划做密码哈希 + JWT 认证 + 文件上传,但代码里一行都还没有。这三块恰是管理系统最易出安全事故的地方(弱哈希、token 校验绕过、上传越权/RCE)。现在无代码可审,属"待建的高风险区"。
补齐真实代码后重点审:bcrypt work factor、JWT 过期/签名/算法固定(防 alg=none)、上传白名单+改名+落盘 noexec 目录、越权(IDOR)与 RBAC 权限校验。
把完整项目重新打包,或告诉我真实代码在哪台机 / 哪个路径。当前包只有骨架,无法做接口级、SQL 级、权限级的真正审计。
与业务代码无关,现在就能处理:换密钥并移出制品、服务降权、关 DEBUG、锁死 extra。
重点覆盖认证、权限(IDOR/RBAC)、SQL 注入、文件上传、CORS、限流、日志脱敏。