Security 为什么不在“取消订阅”链接中使用电子邮件地址

Security 为什么不在“取消订阅”链接中使用电子邮件地址,security,email,email-spam,unsubscribe,Security,Email,Email Spam,Unsubscribe,给我几个理由,为什么不包括在我们的新闻稿中发出的取消订阅链接的纯文本形式的电子邮件地址 现在是: xyz.net/unsubscrible?uid=123&email=user@domamin.com 我正在推动: xyz.net/unsubscrible?uid=123&key=(encrpted_email_md5hash). 我真的不喜欢用纯文本发送电子邮件地址,但需要说服我的经理注意可能的威胁 更新:虽然所有的答案都在建议我应该如何保护它,而不是我应该保护它的原因,但

给我几个理由,为什么不包括在我们的新闻稿中发出的取消订阅链接的纯文本形式的电子邮件地址

现在是:

xyz.net/unsubscrible?uid=123&email=user@domamin.com
我正在推动:

xyz.net/unsubscrible?uid=123&key=(encrpted_email_md5hash).
我真的不喜欢用纯文本发送电子邮件地址,但需要说服我的经理注意可能的威胁


更新:虽然所有的答案都在建议我应该如何保护它,而不是我应该保护它的原因,但我发现do ob的答案最合适。

同样的原因是银行没有类似的链接

bank.com/applycredit?ssn=123456789&name=john+smith&dob=19500101&married=true&address=...

它很容易被截取和解释。

我猜uid是“用户id”。如果您知道用户id,那么您应该能够从中确定电子邮件地址,对吗?似乎在url中包含电子邮件没有任何作用。我想如果你不必包含个人信息,那么最好不要这样做。

我同意,如果你有不同的唯一识别用户的方法,你不需要电子邮件地址。唯一的原因可能是向用户指出他/她订阅的电子邮件地址,但由于他/她显然收到了电子邮件,因此该地址也过时了

我收到的几乎每一份时事通讯的底部都有免责声明,比如:

此电子邮件已发送至YourName@Domain.com. 要取消订阅,请单击此链接:xxxx

我发现在通讯中明确列出我自己的电子邮件地址很有帮助。 电子邮件地址是否在退订链接中,对我来说似乎无关紧要



假设您没有在邮件的实际文本或“取消订阅”链接中发布电子邮件地址。电子邮件地址仍在电子邮件标题中。因此,我并不认为在退订链接中隐藏它的必要性或原因

我可以给你一个非常棘手的答案,但你会发现拥有完整的电子邮件地址并不是一个坏主意

恶意代理(即来自公共场所)可能会使用包含电子邮件地址的URL来存储地址和发送垃圾邮件。但是如果我认为公共场所有恶意的东西,最好在公共计算机上安装一个键盘记录器,做得更糟

另一点可能是:如果您向有价值的客户发送电子邮件,攻击者可能伪造电子邮件地址并取消订阅,实际上会降低您的通信强度。为此,您可以在URL中添加加密校验和(不需要验证码,人们不喜欢取消订阅),但通过加密(或以不明显的方式编码)整个邮件地址,您可以在不使用两个参数的情况下解决问题。

为什么不?不要包含它,因为它不是必需的。这些数据的用途是什么?建议我们不要在查询字符串中包含任何实际上不需要的内容

实际上唯一需要的是一个唯一的标识符。看起来您在查询字符串中已经有了唯一标识符:
uid

一个潜在的问题:是什么阻止了我自动创建取消订阅URL并从100万到1000万点击
?uid=

建议:为表中的每个用户创建用户guid。将其用作您的退订令牌。它不会被猜测或容易受到自动攻击

foo.com/unsubscribe?u=<guid>
foo.com/unsubscribe?u=

因为这样你就可以取消其他人的订阅。理想情况下,您只希望使用一个键:

xyz.net/unsubscrible?key=<some unique cryptographic hash>
xyz.net/unsubscrible?键=

我不能猜测ID和电子邮件,也不能导致其他人发生某些动作。

因为您没有使用
https
,所以可以窥探查询参数。这对于移动用户和笔记本电脑用户来说是一个严重的问题,在像咖啡店这样有免费wi-fi的地方

而且,由于uid已经映射到电子邮件地址,您不需要向窥探者公开电子邮件地址之类的标识信息

你确实需要确保他们点击链接时不会立即取消订阅。这是一个GET URL,它应该是幂等的(参见第节),这意味着它不应该拥有更改基础数据库的权限


我不应该仅仅通过知道你的电子邮件地址就有权取消你的订阅,如果uid是可猜测的或不需要的,我可以通过伪造URL来做到这一点。

是URL
http
还是
https
?你有将uid 123映射到的表吗user@domain.com?它的http,yes 123对应于数据库中存储的电子邮件地址。不完全正确。电子邮件的目的地址是纯文本的:它首先可以被窃听,因此在URL中包含它可以被看作是一种简单的冗余。。。但我需要知道为什么不包括电子邮件。。。因为如果有什么事情发生,它不是那么重要,但也很重要。。。需要知道一些事情;)在这种情况下,黑客不会知道内容,而现在,他们知道
user@domain.com
在某个时间点订阅了
xyz.net
,正在取消订阅。信息是金子。替换
user@domain
abcd@senate
xyz.net
warezxxx.net
一起,你就得到了小报黄金。没错,我的经理是这么说的,但我没有发现一个(在我的订阅中)以明文形式发送电子邮件的退订链接。。。我的公司以纯文本的形式发布,这让我非常困扰,我只是觉得我们应该改变…:)我正在拍摄的uid作为密钥和另一个安全哈希,将用于确保你提到的不会发生。。。GUID将需要在数据库中维护它们。。。这主意不错,但如果我能避免的话,那就太棒了…@xoail:guid的好处是没有维护;在列上设置一个默认值(即SQL Server中的
NewID()
),或者在创建新用户时在应用程序中设置一个更改。是的,这是一个很好的观点。。。但回到我的问题上。。为什么不使用纯文本的电子邮件地址?安全漏洞是什么?这是最基本的