解决转发电子邮件时的退订链接泄漏问题

信息安全 电子邮件
2021-09-05 09:03:14

由于时事通讯经常被转发(事实上成功的人鼓励它!),关于退订链接安全性的传统智慧是什么?

通常的做法是在发送给同意客户的每封简报或类似简报的电子邮件的底部提供一个取消订阅链接以及一个List-Unsubscribe标题。取消订阅链接应包含一个加密安全令牌,指示要取消订阅的订阅者。

该链接通常会立即取消订阅订阅者(而不是通过对话或发送带有确认链接的电子邮件来询问确认),并且通常会提供后续对话,允许订阅者取消订阅他们也订阅的其他时事通讯来自同一网站,或者如果取消订阅是意外,则重新订阅。

那么取消订阅链接的惯例是什么?

是否只是用户注意:如果用户转发了电子邮件,他们就接受了收件人取消订阅该邮件和任何其他时事通讯的风险?取消订阅事件是否应该触发通知电子邮件?或者是否存在电子邮件客户端在转发电子邮件时从电子邮件中删除的特殊不可转发元素?

总的来说,这是一个相对微不足道的安全漏洞,但我想知道这是否已经被考虑过很多,如果是这样,那么约定是什么。(这个问题和答案中简要提到了这个问题,虽然我同意这个问题是微不足道的,但如果有人开发了解决方案,我仍然很感兴趣。)

4个回答

我知道订阅管理系统典型的针对这个问题的几种防御方法:

  • List-Unsubscribe 标头未添加到内联转发中,因此这些链接是安全的
  • List-Unsubscribe-Postheaders ( RFC 8058 ) 指定单击取消订阅,也很安全
  • mailto: 链接是电子邮件,所以只要您从订阅的地址回复就安全了
  • 基于回复的退订可以在某些标头中保留原始列表收件人信息
  • 正文中的取消订阅链接可能要求您输入您订阅的电子邮件地址
    (尽管这不是一键式的,也不应用于List-Unsubscribe链接)

对于程序化的批量邮件检测和管理,我必须坚持拥有List-UnsubscribeList-Unsubscribe-Post标头,尽管我不反对使用额外的方法。值得注意的是,“回复这封电子邮件”的方法特别难以检测。

许多邮寄者使用 mailto 技巧,其中需要发送一封主题为“取消订阅”的电子邮件以取消订阅。

在您的时事通讯中创建一个 mailto 链接。也许添加一个带有一些文本的正文,告诉用户发送这封电子邮件将取消他们对时事通讯的订阅。

<a href="mailto:newsletter@example.com?subject=unsubscribe">Unsubscribe</a>

当用户点击链接时,他们的邮件客户端应该会弹出一封新的电子邮件,ToSubject预先填写好并准备发送“取消订阅”电子邮件。

当您在服务器上收到电子邮件时,提取From字段以查找要退订的人,如果Subject是“退订”,则退订。当然,现在您需要处理电子邮件伪造,如果这是值得解决的问题。

附加信息:如果您想采用标准方式,RFC 2369解释了邮件列表的命令。(编辑:正如@AdamKatz 所澄清的那样,RFC 2369 这些天基本上已经过时了。检查RFC 8058以了解电子邮件标头的最新功能)。

我不认为这个问题有一个理想的安全解决方案来代替更改电子邮件服务和提供商使用的标准。

Mailchimp 等时事通讯服务有兴趣提出安全解决方案,它们使用简单的取消订阅链接,这些链接具有您在此处引用的相同漏洞。Mailgun 是我的首选服务,它具有相同的系统,即为每个用户创建唯一链接。

在 Mailchimp 的情况下,他们有时会在您真正取消订阅之前有一个“确认您的电子邮件”表单,并且他们还可以选择发送“取消订阅成功”通知,但只有后者增加了任何安全层,而且它......可能会来惹恼用户。

稍微编辑一下,电子邮件总体上有点像地狱(一个例子是HTML 电子邮件缺乏标准化),我认为电子邮件中的链接从不完全私密的问题只是其中的一种表现。

为什么mailto解决方案不完美:电子邮件代理

bhorkarg 的回答很好,但它不适用于所有用户——包括我在内——因为使用了可替换的代理电子邮件地址。

我使用代理电子邮件地址,因此我只需要使用一个 Gmail 帐户来发送和接收电子邮件——工作、个人、基于项目或其他。我通过使用improvmx.com转发发送到某些地址的电子邮件来做到这一点,但是那里有很多类似的电子邮件转发服务。

它是如何工作的一个例子:我已经使用随机标识符在哪里,我的域是)注册了《纽约时报》时事通讯,这样,如果我开始在我的邮箱中收到针对该地址的垃圾邮件,我就知道它是从哪里泄露的,并且我可以更改我与Times的电子邮件并阻止所有电子邮件到旧地址。nytimes.com-{UID}@{mydomain.com}{UID}carterpape.com

但是这个系统并不意味着我可以轻松地从该代理地址发送邮件,因为它只是我用来接收电子邮件的地址。如果我单击该取消订阅链接,我会从我实际发送邮件的五个电子邮件地址之一向他们发送取消订阅请求,这不会产生成功的取消订阅。

这当然是一个边缘案例——可能比取消订阅链接泄漏更多的是一个边缘案例——但这只是说明解决安全挑战的各种措施的各种问题,这从根本上是电子邮件本身的问题。

最简单的解决方案(根据我的经验,这是最常见的实现)是在取消订阅链接之后发送另一封电子邮件。该电子邮件可能是“单击以确认退订”或“如果您错误地退订(或者不是您)并希望撤消它,请单击”。

但是,这只会使一个次要的安全漏洞(允许其他用户为您取消订阅)变得不那么重要,因为您现在需要忽略确认电子邮件或撤消取消订阅的尝试。

为了完全消除此漏洞,您可以实施@bhorkarg 所描述的“需要电子邮件”策略,但这可能需要比“关注此 URL”策略更多的用户点击(因此需要更多时间)。