一則訊息可以有一個有效的 DKIM簽名 而其取消訂閱欄位是無符號的。這是一個有意義的差距:驗證訊息的接收者不一定會驗證廣告中的選擇退出操作。檢查簽名的覆蓋範圍,而不僅僅是通用的 DKIM 透過標籤。
找到保護操作的簽名
RFC 8058需要至少一個有效的DKIM簽名,涵蓋 List-Unsubscribe 和List-Unsubscribe-Post 。這兩個欄位必須出現在該有效簽章的 h= 標記中。缺少必需的簽名是接收者不根據規範提供一鍵取消訂閱的原因。 RFC 8058第 4 節.
一則訊息可以攜帶多個簽名。不要將一個的有效性與另一個的標頭覆蓋率結合起來並稱這對足夠。識別涵蓋必填欄位的單一有效簽名,然後保留其簽名者, 選擇器 及驗證結果。這與檢查哪個簽名有助於 DMARC 結盟.
將標頭放置在相關簽名步驟之前
映射訊息建置管道:應用程式範本、清單處理、網關轉換、簽署者和最終出站路由。如果服務在簽名後添加取消訂閱字段,則較早的簽名可能仍然有效,而不會覆蓋它們。解決方法是將這些欄位放在適當的簽名之前,或確保稍後的有效簽名會覆蓋它們。
閱讀最終發出的訊息。 RFC 6376定義了 h= 清單和標頭選擇規則,包括如何處理重複的欄位名稱。在訊息中任意位置搜尋「list-unsubscribe」的字串並不是覆蓋率測試。重複的欄位和轉換需要仔細檢查實際的簽名輸入。 RFC 6376第 3.5 和 5.4 節.
區分已簽名和未簽名的更改
想像一條受控測試訊息,其原本有效的簽名涵蓋了兩個取消訂閱欄位。將簽章 URI 變更為不同的值會變更簽章輸入;在正常的DKIM驗證下,原始簽章不再驗證變更後的輸入。相比之下,省略這兩個欄位的簽名在這些無符號值變更後仍然有效。這解釋了為什麼通用通行證無法驗證每個欄位。
這些是基於協議的期望,而不是執行的加密裝置。實際的授權變異測試需要精確的原始位元組、選定的簽章和正確的驗證金鑰。注入的測試密鑰僅表明該測試的加密關係,而不是公共DNS來源或歷史接收結果。保留原始版本並更改單獨的副本。
檢查整個簽章路徑
修復覆蓋後,透過預定路由重新發送授權測試訊息,並在接收端進行驗證。連結重寫、網關編輯或更高版本的清單處理器可以更改覆蓋的欄位。盡可能保留改造前和最終的樣品,以便所有者可以找到驗證出現分歧的第一階段。
避免透過簡單地從h=.這可以使簽章更容易保存,同時不符合RFC 8058要求。如果網關必須轉換操作,請協調最終簽章邊界並確保轉換後的 URI 仍對應到正確的收件者和清單。
完成操作檢查
簽名覆蓋驗證廣告欄位的身份;它不能證明端點執行了請求的抑制。使用受控制訂閱分別測試 POST 和下游下次發送排除。相反,工作端點不會修復遺失的簽章覆蓋範圍。
關閉記錄應標識有效的覆蓋簽名、準確的最終訊息、端點範圍和觀察到的抑制結果。將提供者 UI 顯示作為單獨的觀察,而不是正確簽名的承諾結果。
保留簽名特定的關閉記錄
記錄最終訊息、簽署者、選擇器、兩個覆蓋欄位以及該特定簽名的驗證結果。分別記錄終點和抑制結果。如果後來的網關改變了字段,請修復簽名邊界而不是刪除所需的覆蓋範圍。