shaw
017f6bbd5e
fix(gateway): 收紧上游 URL 路径片段校验
网关有若干位置会把客户端可控的字符串拼进上游请求的 URL path(Responses
子路径、Gemini 模型名)。此前这些字符串未经校验直接参与拼接,可能改变上游
请求的路径结构,使实际发出的请求与客户端意图不一致。
- 新增 internal/service/upstream_path_guard.go:路径片段闭集允许清单
(\w + `-` + `.`),拒绝空片段、纯点片段、超长片段与过深后缀
- /responses/*subpath 三条路由入口新增守卫,不可转发的子路径直接 404;
service 层同时保证不产出不合规后缀,拼接函数再兜底一层
- Gemini AI Studio 原先 5 处重复的 URL 拼接收敛为唯一构造点
buildGeminiAIStudioModelActionURL(校验模型片段 + action 白名单)
- Gemini native / GetModel handler 增加入口校验;ForwardAIStudioGET 逐片段校验
- Grok video 端点的 request_id 增加片段合规校验
合法子路径(/compact、/compact/detail、/{id}/cancel 形态)与既有模型名行为
不变,通配路由保留。
2026-07-31 16:11:45 +08:00
..
2026-07-28 16:19:41 +08:00
2026-07-28 16:19:41 +08:00
2026-07-20 11:15:37 +08:00
2026-06-11 18:55:27 +08:00
2026-06-11 18:55:27 +08:00
2026-06-11 18:55:27 +08:00
2026-07-26 09:50:28 -04:00
2026-07-16 13:47:50 +08:00
2026-06-30 01:11:51 +08:00
2026-07-28 17:21:32 +08:00
2026-06-11 18:55:27 +08:00
2026-06-11 18:55:27 +08:00
2026-07-28 17:21:32 +08:00
2026-06-11 18:55:27 +08:00
2026-07-29 12:32:44 +08:00
2026-07-29 12:32:44 +08:00
2026-07-24 01:22:34 +08:00
2026-07-15 22:22:51 +08:00
2026-07-23 09:20:52 +08:00
2026-07-23 09:19:25 +08:00
2026-06-16 11:41:54 +08:00
2026-07-23 09:20:52 +08:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-20 02:20:58 +08:00
2026-07-20 02:20:58 +08:00
2026-07-23 09:20:52 +08:00
2026-07-26 20:23:50 +09:00
2026-07-26 20:23:50 +09:00
2026-07-27 15:20:03 +00:00
2026-07-26 20:23:50 +09:00
2026-07-13 11:35:46 +08:00
2026-07-27 15:20:03 +00:00
2026-07-27 15:20:03 +00:00
2026-07-13 15:32:42 +08:00
2026-07-06 16:45:15 +08:00
2026-07-14 14:55:30 +08:00
2026-07-14 14:55:30 +08:00
2026-07-23 09:20:52 +08:00
2026-07-15 22:42:53 +08:00
2026-07-23 09:20:52 +08:00
2026-07-31 16:11:45 +08:00
2026-07-18 21:38:17 +08:00
2026-07-24 01:22:34 +08:00
2026-07-28 16:19:41 +08:00
2026-07-20 15:20:51 +08:00
2026-07-15 19:57:37 -07:00
2026-07-19 00:56:21 -07:00
2026-07-28 16:19:41 +08:00
2026-07-28 16:19:41 +08:00
2026-07-17 22:10:18 +08:00
2026-07-23 09:19:24 +08:00
2026-07-24 01:22:34 +08:00
2026-07-16 00:52:26 +08:00
2026-07-24 01:22:34 +08:00
2026-07-16 17:10:44 +08:00
2026-07-27 18:42:34 +08:00
2026-07-24 01:22:34 +08:00
2026-07-11 12:51:53 +08:00
2026-07-14 22:40:05 +08:00
2026-07-23 09:19:24 +08:00
2026-07-23 00:06:04 +08:00
2026-07-26 20:23:50 +09:00
2026-06-12 01:47:01 +08:00
2026-07-15 13:01:16 +08:00
2026-07-31 10:02:04 +08:00
2026-07-27 13:40:05 +09:00
2026-07-26 13:33:56 +08:00
2026-07-26 13:33:56 +08:00
2026-07-17 15:29:14 +08:00
2026-07-15 04:20:11 +08:00
2026-07-23 23:04:00 +08:00
2026-07-25 14:03:32 +08:00
2026-07-25 12:50:46 +08:00
2026-07-25 12:51:20 +08:00
2026-06-28 11:13:09 +08:00
2026-07-15 09:29:05 +08:00
2026-07-19 18:49:08 +08:00
2026-06-03 14:18:12 +08:00
2026-06-03 14:18:12 +08:00
2026-07-12 04:53:41 +08:00
2026-07-18 00:11:18 +08:00
2026-06-12 01:47:01 +08:00
2026-07-18 20:46:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-23 09:19:25 +08:00
2026-06-10 14:16:51 +08:00
2026-07-26 11:07:12 -04:00
2026-07-28 14:12:46 +08:00
2026-07-13 15:22:39 +08:00
2026-07-22 19:18:04 +08:00
2026-07-09 11:15:52 +08:00
2026-07-07 13:53:39 +08:00
2026-07-07 13:53:39 +08:00
2026-07-17 00:39:39 +08:00
2026-07-17 00:39:39 +08:00
2026-07-17 08:46:57 +08:00
2026-07-17 08:46:57 +08:00
2026-07-17 00:39:39 +08:00
2026-07-17 00:39:39 +08:00
2026-07-28 16:19:41 +08:00
2026-07-07 10:20:23 +08:00
2026-07-16 16:49:08 +08:00
2026-06-05 14:00:57 +08:00
2026-07-08 13:50:49 +08:00
2026-07-08 13:50:49 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 16:19:41 +08:00