接受一份良好 XML 报告的解析器仅通过了一项狭窄的测试。有用的验证套件会检查它提取的内容、拒绝的内容、如何处理支持的变化以及重试是否会更改总数。将预期的标准化值视为夹具的一部分,而不是允许测试发明的输出。
声明支持的合约
参考: RFC 9990 §3.1.1, RFC 9990 §3.2.
记录解析器、运行时、解压缩器和模式版本。说明支持哪些报告格式和扩展以及如何处理旧输入。 RFC 9990 定义当前聚合格式和扩展模型;对旧格式的支持是一个单独的兼容性决定。
首先构建一个最小的有效夹具。保存其字节、散列、预期元数据、间隔、源 IP、计数、身份和对齐结果。不要认为成功的 XML 解析就足够了:验证字段类型和含义。保持缺失的可选值与无效的必需数据不同。
测试常见的语义错误
参考: RFC 9990 §3.1.1.9, RFC 9990 §3.1.1.11, RFC 9989 §5.3.5.
包括原始的 DKIM 通过具有对齐DKIM故障的不相关域和原始域 SPF 通过没有 结盟。包括一种对齐机制通过而另一种失败的情况。检查标准化结果是否要求两种机制都通过或将原始成功与对齐等同。
添加与已发布政策的简单推论不同的报告处置。保留可用的覆盖原因。对于当前模式,包含 ActionDispositionType 值传递,而不是将其作为未知的旧值拒绝; RFC 9990附录 A 定义它用于传递 DMARC 并有执行政策。将遗留格式的期望明确地分开。测试多个DKIM结果,不删除除第一个签名之外的所有签名。目的是保留报告内容,而不是根据不完整的数据捏造新的接收器评估。
练习结构和安全案例
参考: RFC 9990 §3.2, RFC 9990 §8.1.
使用无效的必需值、格式错误的 XML、受支持的命名空间扩展、不受支持的版本、缺少可选元素和过多的有界嵌套。隔离测试压缩和扩展的大小限制、中断输入和无害的外部参考哨兵。定义每个输入是否被接受、隔离或拒绝以及原因。
如果下游分析声称要保留受支持的扩展,则它不应悄然消失。不受支持的构造应该产生显式的兼容性结果,而不是被重新分类为失败的身份验证。保持安全测试规模较小且资源有限;不要仅仅为了证明限制而产生破坏性的工作负载。
验证重复和交易行为
参考: RFC 9990 §3.5.4.
导入夹具,重播它并在再次重播之前重新启动工作器。根据记录的重复规则,计数的报告应保持单一。添加一个不同的附件,声称具有相同的报告身份,并需要明确的冲突决定。仅仅相同的 ID 并不能允许未经审查而丢弃不同的证据。
在提交之前注入受控中断。确认没有部分记录影响生产指标,并且允许的重试一次会产生预期结果。将零观测输出测试为不可用,而不是除以零或制造完美的通过率。
完成验收行
合成夹具 F1 包含 90 个具有对齐的DKIM传递的观测值和 10 个没有对齐的传递机制的观测值。其预期包含计数为 100,预期观察到的通过计数为 90。重播 F1 必须使这两个值保持不变。故意截断的副本应被拒绝,而不增加任何一个总数。
执行前保存预期值。将实际输出、资源测量和诊断与该基线进行比较。这是解析器接受规范,而不是声称任何商业或租户解析器已通过它。一个单独的新离线算术/重放模型检查 100/90 值和重复身份的未更改计数;它不会解析或验证RFC 9990 XML 报告。如果某个案例失败,请保留缺陷和精确的固定装置,以便以后的修订可以重现它。
记录结果的门变化
保留一个包含夹具 ID、散列、目的、预期结果、实际结果、解析器配置和审查决策的矩阵。要求所有强制性案例在部署的修订版中通过,并记录不支持功能的例外情况。在依赖性或规范化更改后重新运行,并在重新处理存储的报告之前比较历史指标效果。解析器验证应该保护系统可用性和人们用于政策决策的数字的含义。