#4604·fiber

合并消毒/正常化辅助工具并去除双重处理

作者: ReneWerner87创建于 2026年8月11日更新于 2026年9月3日
标签🧹 Updatesv3

核心和中间软件载有大约40个重复或不同的变换站点(原发地/主机正常化、逗号列表扫描、ETag解析、控制图处理、引用字符串制作、URL组成警卫),分为以下13个组。 目标:每个关切一个执行,最多每个值一个传出,在依赖它的呼叫站点上写下快讯信托边界。 建议的顺序:第一、第二和第五组(大多数呼叫地点)。

新的帮助者使用“内部/”软件包(没有新的公共API);只有普通字节原始语属于gofiber/utils。

先解决

3个小bug-ish的修补,可以在任何合并前作为独立的PR登陆:

  • [ ]路由器.去 " 建造 " RouteURL " 替代路径抛物,不能逃跑;urlnorm'。 RootedPath”之后拆除了领先的 " / " ,但包含 " ? " 或QQ仍然在重组URL,而Redirect ()'。 Route()通过“ utils” 逃避查询值。 附录查询Escape。 以路径分隔规则(或拒绝结构变化值)来替代参数。
  • 客户端/hooks.goparser RequestURL'通过无干扰的 " 弦 " 代替路径参数。 将All(uri, ":"+key, val")'::id'也匹配于:idx'内部,以及包含/',?'或Q'重组请求目标的未脱逃值. 以区段边界和百分率编码值锁定。
  • [x]取出器/取出器.go FromParam'在c.Params ()'上运行url.PathUnescape',用UnescapePath: fulse' (默认)作为单一解码;用UnescapePath: true' 路径在配置依赖性Paths'中已经解码一次,因此参数被解码两次( " 2520 " 作为空间到达)。 决定哪个层解码,并使计数独立于配置旗.

QQ 什么快取 http 1. 73. 0 已经保证( 服务器路径)

  • 每一份出口头值书写(Set'、Add'、SetCookie'、SetContentType'、特殊装置 ' )通过initheaperValueBytes'的漏斗; 重新移动NewLines':CR和LF被一个空格所取代,无声;头键也是CR/LF过滤;拖车键是不同的形状(验证和拒绝)。 没有导出 API 绕过值过滤器 。 因此,头写前的纤维-侧 CRLF 剥取最多就是浏览器-均等正常化,绝不是注射防御.
  • 解析请求头值拒绝除HTAB之外的 C0 字节,并拒绝 DEL;字节 QQ 0x80 pass. 违反请求被回答400,连接被关闭;被倒塌到一个空间。 包含 CTL 字节的请求目标也被拒绝 。
  • 服务器端URI()'。 路径() " 始终是百分比分解和正常化的(根基、 " / " 分解、 " . " 和 " ././ " 解决了)。 解码在倒塌前运行,所以编码为 " 2F " 的解码器成为了Path ()' 中的真正分隔符。`Path Brobin ()' 保留了生字节。 没有服务器侧开关可禁用此功能;导出“ URI. DisablePathNormalizing” 字段只更改“ 请求URI( ) ” 输出, 永远不要“ Path( ) ” 。
  • " URI( ). host() " 是小写、未脱逃和在解析时验证的;`URI.SetHost'只是小写; . . . . . . .