在评论禁止在电子邮件地址中使用+符号后,我的问题基于此推文。推文中说:“这是出于安全原因而采取的一种措施。”

对于在电子邮件地址中带有(或使用)加号的人来说,这可能令人沮丧且不便,我确保网站不打算这样做。我没有意识到与使用+字符相关的安全漏洞;这是我应该更改以提高自身安全性的东西吗?网站禁止在电子邮件字段中使用该字符的安全原因是什么?

更新:Meetup支持人员做出了积极响应。事实证明,与其说是安全问题,不如说是UX问题。他们在此推文中澄清说,他们禁止+来防止垃圾邮件(?),并且他们承认有改善用户体验的建议。 (我的目的不是要对Meetup感到不安;让我们保持谦虚!我想确保自己在接收电子邮件地址的网站上没有丢失重要的内容。)

评论

我怀疑他们是否有任何有效的安全原因,而是他们只是懒惰而不想修复它。

原因之一是,至少在Gmail中,+之后的所有内容都会被忽略。这意味着example + a @ gmail.com,example + b @ gmail.com等均已传递到example@gmail.com的电子邮件中。这对于找出谁在出售您的信息很有用。例如,如果我使用example+fabrikam@gmail.com注册Fabrikam Inc.的新闻通讯,并且收到Contoso Ltd.发送给example+fabrikam@gmail.com的电子邮件,则我知道Fabrikam正在出售我的信息。

相关:“加仇恨者”

我也经常在Gmail地址中使用+号来过滤邮件,并查看谁出售了我的邮件地址。我相信大多数网站都使用相同的正则表达式来检查输入的邮件地址的有效性,并且该正则表达式不允许使用+号。我已经联系了许多站点,并且大多数人回答这只是系统工作的方式(即他们懒于修复它)

这让我想起了去年的另一则愚蠢的推文

#1 楼

电子邮件地址中带有“ +”本身并不存在安全漏洞。它是根据RFC 2822允许的,对于SQL或其他常见的注入形式不是特别有用。

但是,许多系统(为此目的将Meetup称为系统)通过白名单而非黑名单来实施安全性。有人定义了他们希望在电子邮件地址中看到的有限字符列表(可能是大写,小写,数字,。,_和-),并编写了过滤器以阻止该列表之外的任何内容。而且他们认为没有人会使用+,所以您很不走运。

本文介绍了如何设置Postfix进行标记,以及如何使用“-”代替“ +”,因为:


但是,在最近对Postfix用户列表的讨论中,提到了某些网站(尤其是银行)在输入在线表单时使用JavaScript尝试验证电子邮件地址。 ,并且许多人不允许在电子邮件地址中使用加号作为有效字符。


十年前,出于类似原因,我从'+'切换为'-' 。

评论


可以同时使用+和-吗?我知道gmail将在可能的情况下尝试将您的+标记过滤为单独的标记,即my.email+spam@gmail.com会将来自该特定服务的所有电子邮件发送到垃圾邮件标记。我从来没有尝试过my.email-spam@gmail.com。

–塞伊里亚
14年8月13日在0:51

简而言之,+和-都是合法字符,您可以在电子邮件地址中以任意组合使用这两种字符。但是,如何处理取决于您的邮件服务器。 Courier和Postfix都支持使用简单的配置设置进行标记,但是我认为如果没有额外的工作,它们都不支持两个标记。 YMSMV(您的邮件服务器可能会有所不同)。

– gowenfawr
2014年8月13日在12:07

如果您没有运行自己的邮件服务器,则无法控制它们如何处理连字符。在大多数情况下,“ doktor-spam@example.com”是与“ doktor@example.com”完全不同的电子邮件地址/帐户。 OTOH,大多数提供商将“ doktor+spam@example.com”与“ doktor@example.com”相同,从而允许您将其用于客户端过滤。

– Doktor J
14年8月13日在17:54

@immibis是的,您是对的:RFC 822允许本地部分是由点分隔的单词的序列,并且单词可以是带引号的字符串,可以包含任何字符(其中某些字符可能需要反斜杠转义)。 。 RFC 2822也允许这样做,但是指定使用“ SHOULD NOT”。

–法律
2014年8月17日在20:26

是否有任何理由不支持所有有效的电子邮件地址(除了验证地址的简便性之外)?

–凯特
2014年8月22日17:18



#2 楼

他们可能无能,甚至可能不知道他们在骗你。

从输入验证的角度来看,他们没有立场可言。有一组特定的RFC可以可靠地描述有效电子邮件地址的格式。即使根据RFC在技术上电子邮件地址是无效的,仍然仍然有可能向其发送邮件。您可以通过向其发送带有唯一链接的邮件以供所有者单击来检查电子邮件地址是否可以交付。

链接的网站上显示:


遗憾的是,许多网站都不允许您注册带有加号的地址。不是因为他们试图击败您的跟踪策略,而是因为他们很烂。他们从一个狡猾的网站上复制了一个损坏的正则表达式,并使用它来验证电子邮件地址。这样就失去了客户。


即使我们假设他们的代码已完全损坏,并且使用废话验证程序,因为他们确实将经过验证的电子邮件地址粘贴到UNIX shell中,没有给出将joe.bloggs+meetup.com.better.not.sell.this.to.spammers@example.com视为无效的正当理由。

没有有效的安全理由禁止在电子邮件地址中使用+。即使垃圾邮件发送者将其用作建立多个帐户的廉价方式,网站也可以轻松查看是否有人同时注册了joe.bloggs+1@example.comjoe.bloggs+2@example.com;如果Joe Bloggs滥用其服务,则可以轻松地禁止这两个帐户。具有自己的邮件服务器的任何人都可以生成有效的电子邮件地址,例如joe.bloggs1@example.comjoe.bloggs2@example.com。通过禁止使用+,它们不会获得额外的安全性。

评论


这也是我的想法,但我不太确定。感谢您的解释。我认为这些站点中的大多数并不是真正没有能力的,但是很可能存在错误信息和疯狂的假设。因此,我认为眼前的真正问题更多是用户体验,而不是安全性。

–马特
14年8月12日在20:09

因此,也许“安全原因”是他们正在将您的电子邮件地址出售给垃圾邮件发送者,并试图防止用户将其标识为供应商;-)当然,他们会因为您所说的原因而失败,因为有人说他们自己的域名会弄清楚他们在做什么。

–史蒂夫·杰索普(Steve Jessop)
2014年8月13日在12:28



“拥有自己的邮件服务器的任何人都可以生成有效的电子邮件地址”,还有一些现有的邮件服务允许所有用户名均有效(例如,mailinator.com及其别名)

– Brian S
2014年8月14日22:50

好吧,他们可能会在某处接受电子邮件地址作为GET参数,然后将其发送到Unix shell而不进行验证(将加号转换为空格)。当然,在那种情况下,不允许字符而不是进行适当验证的整个方法是如此愚蠢,以至于“解决方案”是一种弊病。

–达蒙
2014年8月15日在8:15



#3 楼

正如其他人指出的那样,没有真正的安全理由禁止加号电子邮件地址。

作为一名Web开发人员,我能想到的主要原因是防止用户使用进行多次注册不同的别名,尤其是在一个电子商务网站上,在该网站上您希望一次性限制每个人。

从数据库管理员的角度来看,对如果要接受加号,则必须建立数据库,同时将每个电子邮件地址的电子邮件注册限制为一个别名。否则,如果电子邮件地址重复,则在电子邮件地址上设置UNIQUE键就足以防止INSERT

上述原因是技术和商业决策的结合,在以下情况下不易解释一行字。如果您在电子邮件地址中使用别名,一个简单的解决方案是删除该部分以便进行注册。

评论


DBA的观点令人耳目一新,谢谢!不过,我想对电子邮件地址进行一些预处理以去除加号部分可以节省该额外的查询。这步入UX边界,但很有趣,因为正如您所建议的,以后我应该可以更改电子邮件地址以带有加号,而不会带来负面影响。 (我同意;但是我怀疑大多数网站都采用这种方式。)

–马特
14年8月13日在13:55

对。这是一堆额外的工作。我个人使用+来了解谁在出售我的数据。但是要在我工作的网站上正确处理它,我需要在数据库中添加一个额外的字段,以强制执行“每个电子邮件地址一个免费帐户”-我需要使用用户选择的电子邮件地址记录一个字段,然后解析一个字段以删除修饰符-并单独检查未经修饰的字段的唯一性,决不要将其用于任何其他目的。付出很多努力对网站几乎没有好处。说起来容易些:“不。在电子邮件添加项中没有加分项,无言。安全性,队友,安全性-不告诉你,是吗?”。

– JezC
14年8月13日在18:21

@Matt,因为RFC标准没有将+符号的使用限制为别名,所以网站所有者也无法食用蛋糕。一旦决定排除别名进行注册,将留下电子邮件地址不常见的用户。我不建议您在注册后可以随后添加回别名,因为我相信相同的验证规则将适用于电子邮件更改。

–问题溢出
2014年8月14日在2:53



“防止用户使用不同的别名进行多次注册”-我想如果人们真的想获得多个免费优惠,他们只会创建多个帐户。我想会有更多的人知道免费的电子邮件帐户,然后知道gmail中的别名。

– Maciej Piechotka
2014年8月14日17:23



@QuestionOverflow因此,业务规则规定默认情况下会阻止使用gmail,yahoo,hotmail和其他类似帐户的用户?鉴于这3个域拥有超过96%的美国市场份额(对不起,我找不到世界范围的数据),这听起来像是受阻客户造成的损失要比几个免费乘车者可能造成的损失大得多-除非这是非常具体的局限性并且可以只能接受大学的地址。

– Maciej Piechotka
14年8月16日在9:19

#4 楼

我能想到的唯一安全性原因是,他们正在使用正则表达式来处理电子邮件,并且它们的软件是垃圾邮件,无法正确地转义地址,并且会出错。
也许还很遥远,但是我已经看到了与之相关的问题带有+和正则表达式的电子邮件地址。
无论如何,结论是这些网站都是垃圾。

评论


哦,我不知道这一点。他们的网站非常适合安排聚会,我很喜欢参加的聚会。尽管问题可能反映了错误的UX决策,但如果只需要更改某些正则表达式,则实际上与整个服务的有效性无关。

–马特
14年8月13日在17:59

如果要在正则表达式中使用+,则只需使用\ +。这是基本的Regex。

–科尔·约翰逊(Cole Johnson)
2014年8月13日19:00

如果真是这样,他们可能也不会支持期间(他们这样做)。

–Fuzzy76
2014年8月14日上午8:29

@ColeJohnson不,在基本正则表达式中,如果要使用+,请使用\ +。谨防意外使用技术术语!

–吉尔斯'所以-不再是邪恶的'
14年8月14日在12:41

@ Fuzzy76,我已经看到大多数时候正则表达式中使用的点都没有转义。许多程序员只是没有那么想。但是,点号不会破坏有效用例的匹配,并且很长一段时间或永​​远都不会引起人们的注意。我也看到字符类中的点逃脱了,这是另一个问题。你们正在将“他们可以做什么”与“他们做什么”混淆了。转义用户提供的字符串需要做一些适当的考虑。禁止+阻止垃圾邮件同样是la脚。如果很容易防止垃圾邮件,那么本来就不会有垃圾邮件。

–akostadinov
2014年8月18日在6:26