mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-10 08:43:34 +08:00
- 客户端补归一化:两个页面脚本都用 location.search 重读原始 next,服务端过滤对其完全无效。 新增共用的 safeNextTarget(),用 URL 解析器做同源判定(javascript:/data: 的 origin 为 null), 归一化后再交给 window.location.replace,堵住 ?next=javascript:... 在页面自身源内执行、 进而携带会话 Cookie 调用 /api/invoke 读取全部已保存连接并执行任意 SQL 的链路 - 服务端补 /\ 缺口:抽出 isSafeLocalRedirect 供 resolvePostAuthRedirect 与 buildAuthRedirectURL 共用。WHATWG URL 解析器对 special scheme 把反斜杠等价为斜杠, 故 /\evil.com 会被解析成 //evil.com,原先仅查 // 前缀挡不住该变体 - 补回归测试:覆盖 javascript:/data:///evil.com//\evil.com 等载荷, 并断言两个页面脚本不再出现未归一化的 next 裸读