DNS编辑器可以显示多个引用的片段,而无需创建多个记录。相反,对于一个人来说,两行看起来像是一份保单,而对于接收者来说,则保留两条独立的记录。在声明身份验证记录正确之前,请检查确切值和记录边界。
读取DNS表示
参考: RFC 1035 §3.3, RFC 1035 §3.3.14, RFC 7208 §3.3.
RFC 1035将TXT数据定义为一个或多个字符串。每个字符串限制为 255 个八位字节,不一定是 255 个显示字符。较长的值可以占用一条记录中的多个字符串。应用程序定义如何解释该数据。为了 SPF, RFC 7208明确要求在内部连接字符串 一个记录 无需插入空格。
区域文件表示中的引号分隔字符串。它们不会自动成为DNS值中的原义引号。提供者的表单可能需要原始文本、带引号的区域文件语法或结构化字符串列表。遵循其记录的输入格式并检查结果答案,而不是添加或删除引号,直到屏幕看起来熟悉为止。
保留空间和独立记录
参考: RFC 7208 §4.5.
如果SPF值在某个机制之前被分割,请保留其中一个字符串内的分隔空间。两个相邻的字符串包含 v=spf1 和 ip4:192.0.2.10 -all 如果没有该空间,将重建为无效的令牌序列。在这个格式错误的示例中,重构的前缀是 v=spf1ip4,这不是有效的SPF版本令牌。如果没有选择其他记录作为SPF策略,则SPF结果为 None。保留确切的应用程序语法,而不是假设每个TXT使用者都以相同的方式处理空格。
请勿单独加入 TXT记录 仅仅因为解析器将它们返回到一个集合中。同一所有者有多个不相关的TXT记录是正常的。在该所有者处选择作为SPF策略的多个记录不是: SPF返回永久错误而不是合并其授权列表。在诊断中保留完整的答案和应用程序的选择规则。
重现边界测试
合成区域夹具 A 包含一条记录: example.com 。 300 IN TXT “ v=spf1 ip4:192.0.2.10" “ -all ”。按顺序重建其字符串而不添加字节。预期的SPF文本为 v=spf1 ip4:192.0.2.10 -all。文档地址仅供参考,不得用于授权生产发送者。
夹具 B 用两条记录替换 A: example.com 。 300 IN TXT “ v=spf1 ip4:192.0.2.10 -all ” 和 example.com 。 300 IN TXT “ v=spf1 ip4:192.0.2.20 -all ”。预期的SPF选择是多个策略记录和永久错误。夹具 C 保留 A 并添加 example.com 。 300 IN TXT “站点验证=合成”;不相关的验证记录不是额外的SPF策略。
在隔离的测试区域中单独加载每个夹具。询问 挖掘@AUTH example.com 。 TXT +norecurse,用实验室权威代替 AUTH。为每个返回的记录及其有序字符串列表保留一个资源记录对象。一个可靠的线束应该区分 A 和 B,即使它的显示屏包含长输出。这些是预期结果,而不是报告的现场测试。
验证发布的值
比较编辑器输入、每个权威答案和递归答案。检查所有者名称是否有意外重复的区域后缀。使用DNS库在自动检查时保留记录结构;面向行的文本抓取可能会将换行与记录边界混淆。
在生产变更之前保留先前的值和批准。发布后,用无害内容测试相关邮件路径并捕获身份验证证据。正确的TXT语法建立了DNS前提条件;它不能证明服务签署了消息或接收者接受了它们。
保持证据范围明确
本地字符串连接确认保留的空间产生v=spf1 ip4:192.0.2.10 -all ;省略它会产生未选择的v=spf1ip4前缀。这是文本/选择插图,而不是执行的SPF评估器或实时DNS查询。