Skip to content

修复 SDK 应用内路径的控制字符校验缺口 - #1

Merged
GuGuMur merged 1 commit into
mainfrom
codex/reject-control-character-paths
Nov 11, 2026
Merged

GuGuMur merged 1 commit into
mainfrom
codex/reject-control-character-paths

Conversation

@hao2530

@hao2530 hao2530 commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

背景

SDK 原有约定要求登录地址和返回地址为应用内相对路径,但校验只拒绝反斜杠、CR/LF 和 //,仍会接受 TAB 等 ASCII 控制字符。浏览器 URL 规范化可移除 TAB,使通过原校验的 /<TAB>/example.invalid 被解释为站外地址。

这是 SDK 输入边界的本地复现;没有访问生产环境,也未证明具体部署可被利用或存在令牌泄露。

修改

  • TypeScript 浏览器 loginURL 的 path/returnTo、accountStatus 的 path,以及服务端 returnTo,拒绝 U+0000–U+001F 和 U+007F。
  • Python 和 Go SDK 的登录、绑定、注册入口遵守相同限制,在 HTTP 请求或事务写入之前拒绝异常路径。
  • 沿用现有错误类型与默认路径,保留普通 query/hash、Unicode 和百分号编码;不改 OIDC/PKCE 协议、公共 API、数据库或中心服务。
  • 增加跨 SDK 回归与合法输入兼容性测试。

验证

  • 新回归在修改前失败、修改后通过。
  • TypeScript SDK:pnpm test,14 项通过。
  • Python SDK:python -m unittest discover -s sdk/python/tests -p 'test_*.py' -v,8 项通过。
  • Go SDK:go test -race ./...,SDK 与 Gin adapter 两个包通过;go vet ./... 通过。
  • 不以 SDK 单测替代 PostgreSQL、中心服务及真实应用的端到端契约测试。
  • 本地工具链:Node 24.20.0、pnpm 11.25.0、Python 3.12.15、Go 1.26.8;未跑完整 CI 版本矩阵。

协作与状态

提交前使用 gh 复核:默认分支仍为 7e9e8c5,仅有 main,无开放 PR 或可见重叠分支;公开信息无法排除私有或线下工作。

先以 draft 提交;独立评审完成后转 ready for review。未执行发布或数据库迁移,不表示可以跳过维护者审查直接上线。

独立评审与 CI(2026-11-09)

  • 未参与实现的审阅者检查全部7个文件,未发现本次引入的实质缺陷;独立复跑 TS 14项、Python 8项、Go 两包通过,另完成 TS 类型检查及编译产物一致性核对。
  • GitHub push/PR 两次触发的共10项检查均成功:core-sdk、Go SDK、Python 3.10/3.13、TypeScript SDK。CI 成功不等同真实生产集成验收。
  • TS server 在校验前可能进行 discovery 属原有行为;本次不扩展重构。百分号编码经下游再次解码的风险不属于原始控制字符校验的保证范围。

@hao2530
hao2530 marked this pull request as ready for review November 9, 2026 14:27
@GuGuMur
GuGuMur merged commit 416ee07 into main Nov 11, 2026
10 checks passed
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