v0.2.13 — CLI 路径穿越安全加固 (#51)
安全补丁。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、~/secret、a/../../b、\x00evil、.、/abs/path等 - 7 个正常代码全部通过且保留交易所后缀:
SPY、600519、0700.HK、7203.T、CNC.TO、^GSPC、BRK.B
纯 CLI 入口加固,复用既有校验器,数据层 / Agent 逻辑零改动。