消息正文中的取消订阅链接, List-Unsubscribe header 和一键机制是相关但不同的功能。诊断应确定发送方实际发出的机制以及是否存在所需的签名标头。仅在源代码中看到“取消订阅”一词并不能建立有效的一键实现。
一起读取两个字段
RFC 2369将List-Unsubscribe定义为包含用于离开列表的 URL 的列表命令字段。它可以描述 mailto 或 HTTPS 等方法。 RFC 8058为一键机制添加了List-Unsubscribe-Post 。后者使用值List-Unsubscribe =One-Click,并在List-Unsubscribe中使用 HTTPS URI。单独的 mailto 选项并不是RFC 8058 HTTPS 机制。 RFC 2369第 3.2 节, RFC 8058第 3 节.
一键接收器发送带有指定取消订阅值的 HTTPS POST。用于检查 URL 的例程 GET 本身不得执行RFC 8058取消订阅操作。这种区别很重要,因为链接扫描器可能会在用户不打算留下列表的情况下获取 URL。不要将诊断检查变成未经授权的订阅更改。
检查签名要求
RFC 8058需要有效的 DKIM签名 涵盖List-Unsubscribe和List-Unsubscribe-Post 。在签名的 h= 列表中查找两个字段名称是一种有用的结构检查,但它并不能证明签名已验证。
保留原始签名消息以进行实际验证。多重签名、重复头域需要谨慎选择;简单的子字符串搜索可能会将不相关的签名误认为是满足要求的签名。将签名覆盖率、加密验证和端点行为作为单独的检查。
使用受控示例
考虑一条具有正确的两个标头值的假设消息。它唯一有效的签名涵盖发件人和主题,但不包含取消订阅字段。第二个签名列出了这两个字段,但验证失败。此消息同时具有 DKIM 在其源代码中的某个地方通过了明显的覆盖范围,但这两个签名都不满足组合的RFC 8058要求。
下一步是通过批准的发件人更改来识别或创建既验证又涵盖这两个字段的签名。本教学示例未验证签名或更改订阅。即使随后验证的覆盖签名也会使 HTTPS 端点行为和下次发送抑制未经测试。
对于授权的端到端测试,请使用专用的测试订阅和发送者支持的测试环境。验证有效签名,发送预期的 POST 并通过服务自身的证据确认测试订阅的状态。 RFC 8058禁止 HTTPS 重定向,并从 POST 中排除 cookie、HTTP 授权和其他请求上下文。接收者在发布之前必须获得用户同意。将任何重定向或登录要求记录为缺陷,而不是点击;端点必须在没有额外交互的情况下完成取消订阅。
保护订户标识符
取消订阅 URL 通常包含收件人特定的令牌。将完整 URL 视为可能能够更改该人的订阅。编辑或替换一般诊断副本中的令牌,私下保留未更改的消息,并且不要将实时 URL 粘贴到公共票证或自动获取器中。
以明确的检查表结束:存在字段、正确的语法、涵盖已验证的签名以及已完成或未执行的授权端点测试。提供商批量发件人资格和取消订阅界面显示是单独的产品问题。标准级标头检查并不能保证任何邮箱提供商都会显示特定按钮。
独立报告各层
如果标头存在但签名验证不可用,则仅报告结构发现。如果验证通过但未发生授权端点测试,则不测试行为。记录准确的最终样本和下一层所需的证据。