4. 验证外部目标
可以为不同 reports 指定不在发出请求的 Domain Owner 权限范围内的 destinations. 这允许不运行 mail servers 的 domains 请求 reports, 并让 reports 发送到能够接收和处理它们的位置.
如果没有检查, 恶意行为者就可以发布一个 DMARC Policy Record, 请求将 reports 发送到 victim address, 然后向大量 destinations 发送大量会同时未通过 DKIM 和 SPF checks 的邮件. victim 随后会被不需要的 reports 淹没. 因此, 本文包含了一个 verification mechanism.
当 Mail Receiver 在 DNS 中发现 DMARC Policy Record, 且发现该 record 所在的 Organizational Domain 不同于 "rua" tag 中指定的 [RFC3986] authority component 的 host part 所属 Organizational Domain 时, MUST 执行以下 verification steps:
-
提取 URI authority component 的 host portion. 将其称为 "destination host", 因为它指代 Report Receiver.
-
前置字符串 "_report._dmarc".
-
前置检索 policy 的 domain name, 如有需要, 先转换为 A-label [RFC5890].
-
如果构造出的 name 长度超过 DNS limits, 则无法对 external reporting relationship 做出肯定判定. 停止.
-
在构造出的 name 处查询 DNS TXT record. 如果此请求的结果是某种 temporary DNS error, 例如 timeout, Mail Receiver MAY 选择临时失败 delivery, 以便稍后重复 verification test.
-
对返回的每条 record, 将结果解析为一系列 "tag=value" pairs, 即与 DMARC Policy Record 相同的总体格式. 参见 [RFC9989] Section 4.7. 特别是, "v=DMARC1" tag 是 mandatory, 并且 MUST 出现在列表首位. 丢弃任何未通过此测试的 record. 末尾的 ";" 是 optional.
-
如果结果中没有通过基本解析的 TXT resource records, 则无法对 external reporting relationship 做出肯定判定. 停止.
-
如果解析后集合中至少保留一条 TXT resource record, 则 external reporting arrangement 已由 Report Consumer 授权.
-
如果因此发现 "rua" tag, 则用此 record 中找到的值替换从 domain 的 DMARC Policy Record 中提取的相应值. 这允许 Report Consumer override report destination. 但是, 为防止 loops 或 indirect abuse, overriding URI MUST 使用第一步中的同一 destination host.
例如, 如果 "blue.example.com" 的 DMARC Policy Record 包含 "rua=mailto:[email protected]", 从后者提取的 Organizational Domain host ("red.example.net") 与 "blue.example.com" 不匹配, 因此会执行此过程. 随后发出对 "blue.example.com._report._dmarc.red.example.net" 的 TXT query. 如果返回的单个 reply 包含 "v=DMARC1" tag, 则确认二者之间的关系. 此外, 如有需要, "red.example.net" 有机会 override "blue.example.com" 请求的 report destination.
如果上述 algorithm 未能确认 external reporting 已由 Report Consumer 授权, 生成 report 的 Mail Receiver MUST 忽略该 URI. 此外, 如果确认 record 包含的 URI 之 host 又不同于发布该 override 的 domain, 则生成 report 的 Mail Receiver MUST NOT 向原始 URI 或 override URI 生成 report. Report Consumer 如果希望接收其他 domains 的 reports, 就在其 DNS 中发布此类 record.
愿意接收任何 domain 的 reports 的 Report Consumer 可以使用 wildcard DNS record. 例如, 位于 "*._report._dmarc.example.com" 的 TXT resource record 只要至少包含 "v=DMARC1", 就确认 example.com 愿意为任何 domain 接收 DMARC reports.
如果 Report Consumer 被 volume 压垮, 它可以简单地移除确认 DNS record. 但是, 由于 positive caching, 更改最长可能需要该 record 的 Time to Live (TTL) 才会生效.
如果 DNS query length 过长, 即上文 Step 4 的情况, Domain Owner 可能需要考虑使用更短的 domain name, 或与可能允许更短 DNS label 的另一方协调.