Skip to content

v0.2.13 — CLI 路径穿越安全加固 (#51)

Choose a tag to compare

@simonlin1212 simonlin1212 released this 03 Jun 16:04
· 2 commits to main since this release

安全补丁。CLI 是唯一未对 ticker 做路径组件校验的入口,建议升级。

Security · CLI 路径穿越加固(#51

感谢 @mituxunzhi 报告并给出修复方向 🙏

ticker 会被拼进 results_dir / <ticker> / <date> 和报告保存路径,形如 ../../tmp/evil 的输入可写到目标目录之外。Web UI 及数据层(a_stock.py / checkpointer.py / stockstats_utils.py)早已统一走 safe_ticker_component 校验,CLI 是唯一缺口。三处加固:

  • cli/utils.py:normalize_ticker_symbol() — 委托 safe_ticker_component() 校验(拒绝 /..~\0、绝对路径、纯点等),返回校验/解析后的安全值(中文名自动解析为 6 位代码)。
  • cli/main.py:get_ticker() — 输入后即校验,非法则提示并重新询问(而非崩溃),返回安全值。
  • cli/main.py 报告保存 — 保存路径先 .resolve(),落在当前目录之外则提示确认,拒绝则取消保存。

验证

  • 11 个穿越载荷全部被拒:../../tmp/evil/etc/passwd~/secreta/../../b\x00evil./abs/path
  • 7 个正常代码全部通过且保留交易所后缀:SPY6005190700.HK7203.TCNC.TO^GSPCBRK.B

纯 CLI 入口加固,复用既有校验器,数据层 / Agent 逻辑零改动。