go net: LookupMX不考虑IP地址作为有效记录

cbjzeqam  于 24天前  发布在  Go
关注(0)|答案(5)|浏览(17)

这是对 #46979 的后续。我发现了另一个案例,其中 https://golang.org/cl/322230 破坏了原始逻辑。尽管 MX 记录必须包含域名,但偶尔它们也包含 IP 地址。这个更改将 IP 地址视为无效记录,并返回错误,使得向相应的电子邮件服务提供商发送邮件变得不可能。在伟大的模式事物中,这样的案例数量微不足道,但我们仍然在 Mailgun 每小时处理几千条这样的消息给这些电子邮件提供商。因此,本着 Robustness Principal 的精神,我认为应该对 MX 记录中的 IP 地址进行更改。

sc4hvdpw

sc4hvdpw1#

顺便说一下,我们遇到了类似的问题:LookupSRV 函数在 Nomad/Consule 通过 SRV 记录暴露示例 IP:端口时运行不佳,但 LookupSRV 强制使用域名。所以,大家可能应该停止尝试“修复”互联网,而是让解析器方法返回任何 DNS 服务器提供的服务。或者至少提供一种禁用烦人验证的方法。

deikduxw

deikduxw3#

我最近注意到了这一点。以下是一些具有MX记录的域名,其中至少有一个是IP地址(截至2024-04-19):

  • testsys.com
  • eohu.ca
  • libertyhardware.com
  • sbc-holding.com
  • victoriafallshotel.com
  • lucelec.com
  • clearchannel.com.br
  • thefloow.com
  • cityofscottsboro.com
yzxexxkh

yzxexxkh4#

CC @rolandshoemaker @golang/security

vjrehmav

vjrehmav5#

我们目前支持包含任意位置数字的域名,但它还必须至少包含一个非数字字符(除了点)。
go/src/net/dnsname_test.go
第22行
| | {"26.0.0.73.com", true}, |
另外,根据RFC 1123:
2.1 主机名和数字
RFC-952 [DNS:4]中指定了合法互联网主机名的语法。现在放宽了对第一个字符的限制,允许是字母或数字。主机软件必须支持这种更宽松的语法。
RFC 8499:
请注意,域名中的任何标签可以包含任何八位字节值;主机名通常被认为是遵循“首选名称语法”的域名,但修改后,标签可以从ASCII数字开始(这一修正来自[RFC1123]的第2.1节)。

相关问题