【问题标题】:Is email verification with a link a bad idea带有链接的电子邮件验证是个坏主意
【发布时间】:2017-12-27 23:23:54
【问题描述】:

在我的注册过程中,用户注册,他们会通过电子邮件收到一个验证链接,如果他们点击它,他们的帐户才会被验证。但是这种验证方法对机器人来说是不是太容易了?

我认为电子邮件可以由机器人创建,但可以肯定的是,如果验证只是点击一个链接,它也可以由机器人自动完成。我不确定,因为我没有这样做,也不想测试它只是为了知道,但我的问题是这种验证方法是否有缺陷?

我正在考虑将验证码作为文本发送给用户,他们必须手动将其复制/粘贴到表单中,并且表单受验证码保护。这是一个更好的主意吗?有什么缺陷吗?

【问题讨论】:

  • 大概人类可以记住 5 分钟前他们注册的时间?即他们将期待来自相关站点的验证电子邮件....
  • @Mitch Wheat 不确定我明白你的意思。我在说的是有人在做自动注册。他们使用自动化脚本创建了 100 个电子邮件地址,然后当他们到达他们的电子邮件时,自动化脚本还会点击这些验证链接。基本上是自动注册。
  • 电子邮件验证并非旨在将人类与机器人分开,而是将真实电子邮件地址与虚假电子邮件地址分开。毕竟,作为管理员,您希望能够通过电子邮件联系注册人。防止注册机器人是一个完全不同的故事。只需在注册表中添加一些验证码...

标签: php security registration email-verification


【解决方案1】:

大多数建议都是关于验证电子邮件和使用验证码,当然你应该这样做,但请记住,这些方法都不是完全安全的。

电子邮件验证

机器人可以轻松“点击”任何电子邮件中的链接。对于机器人作者来说,复制和粘贴一些东西会稍微烦人,但不会太多。通常电子邮件验证就是这样 - 电子邮件验证。

您验证电子邮件是否可能由任何尝试注册的人控制,但当然,由于电子邮件通常通过不受信任的 TCP 以明文形式发送并且依赖于不安全的 DNS,那么直到我们都使用 DNSSEC 并加密所有流量嗅探电子邮件和欺骗服务器和客户端将很容易。需要意识到的重要一点是,使用电子邮件验证您只能在一定程度上确信与您交谈的任何人或任何人确实是该电子邮件地址的用户。

图灵测试

回答一个只有人类应该知道答案的问题会更烦人,但考虑到您可能不会有无限数量的问题,机器人作者可能会将未知问题重定向给真正的人类并使用缓存的答案,如果任何问题都会重复不止一次。像我最近在一些网站上看到的图灵测试那样回答“什么是 12+8”之类的问题完全适得其反,因为这个问题对于机器人来说实际上比对人类来说更容易。可能最受欢迎的图灵测试是验证码,但在这里你也必须意识到它们可能会被愚弄。

首先,人们展示了绕过 CAPTCHA 的方法,例如参见 DEFCON 18 的 Decoding reCAPTCHA 演讲。许多 CAPTCHA 更容易被机器人破译,因为它们是由微不足道的算法生成的扭转。 reCAPTCHA 失真也非常简单,但它们使用的词是真实的扫描词,对 OCR 来说很难,所以原则上它对机器人来说应该更难,但情况并非总是如此。

还可以在其他网站上显示您想猜测的验证码,并让人们为您回答。还有一个 的黑市实际上解决了验证码,所以如果你的机器人作者不介意为一打支付两美分,那么无论对人类来说有多难,真正的人类都会解决它无论如何。

底线

最重要的是,使用任何 bot 停止技术总是会妥协于 bot 所有者(垃圾邮件发送者或其他任何想要在您的系统中注册大量用户的人)愿意花费多少做这件事的时间、精力和金钱,以及你要容忍给你的用户带来多少不便,因为最终你将永远无法进行任何自动化测试来区分人类和机器人,而不会真正惹恼人类并疏远残疾人(有没有人尝试过猜测 reCAPTCHA 的 音频 版本?),但你的机器人实际上可能是人工驱动的,所以可以说不是真正的机器人,而是机器人。

这是一场军备竞赛,您的诚实用户为此付出了代价。请记住所有这些。

【讨论】:

  • 如果在通过单击电子邮件中的链接获得授权后谈论投票(基本上是提交表格),蜜罐是不是 CAPTCHA 的一个不错的解决方案?
  • 我将补充一点,您可以使用 Emaile2e.com 之类的服务对您的验证电子邮件进行 e2e 测试,您可以使用该服务在测试期间生成随机电子邮件地址以进行发送和接收。
【解决方案2】:

问题是您要验证什么?当您发送指向电子邮件地址的链接时,您可以知道注册该帐户的人可以访问该电子邮件地址。除此之外,它不会告诉你任何关于他们的信息。

是的,机器人可以创建一个帐户,并将其用于注册。如果您想阻止机器人,那么是的,您需要添加验证码。请注意,添加代码以进行复制/粘贴几乎没有意义 - 这对机器人来说很容易做到,而且对验证码也没有任何好处。

【讨论】:

    【解决方案3】:

    与往常一样,安全性和便利性通常是相互竞争的。

    电子邮件中的链接只是验证它是一个有效的电子邮件地址。是的,机器人很容易处理这个问题。但是您的服务是否如此有价值以至于机器人会攻击它?

    验证码始终是确保您的用户是人的方法。额外的编码和与之相关的挫败感是一种权衡。

    最后,让事情尽可能简单,但不要简单。

    【讨论】:

    • 今天任何半体面的网站对机器人来说都是有价值的。他们创建了一个帐户,然后将他们的链接和垃圾作为内容发布,这确实开始降低新用户的网站质量。
    • 完全同意。无论如何,我发现人类有一半的时间都在发布垃圾。
    【解决方案4】:

    正如已经指出的,您只需进行一些 CAPTCHA 验证。

    我的建议是在您的应用创建用户帐户并发送验证电子邮件之前进行人工验证。您的网站的附加值不能轻易被强制发送垃圾验证电子邮件和创建虚假等待验证帐户。

    如果你这样做,链接没有错。

    【讨论】:

      【解决方案5】:

      是的,机器人可以输入电子邮件并检查回复。我还听说过让机器人在图像识别和回答验证码方面做得更好的努力,尽管我不能肯定它们有多好。如果你真的很担心,我会选择:

      1. 电子邮件验证
      2. 验证码
      3. 简单的随机问题(大多数人有多少耳朵/手指?)
      4. 通过短信发送验证码的手机号码

      最后一个可能被证明是消除机器人程序的最佳方法,但它也会限制注册您网站的用户。此外,您拥有的验证越多,您就越会惹恼用户,并且您就越会增加让他们注册的障碍,这也可能是一个很大的缺点。就我个人而言,我认为验证码可以很好地平衡机器人保护与用户不便。

      【讨论】:

        【解决方案6】:

        您是仅验证电子邮件还是进行完整注册?

        我总是先验证电子邮件帐户。然后一旦验证完成注册过程。

        所以在验证电子邮件步骤中添加验证码。

        换句话说,要求用户输入他们的电子邮件地址,输入验证码并提交表单。

        这样只有真人才能收到发送的验证电子邮件。

        它当然不会阻止人类机器人。

        直流

        这也意味着您不需要存储失败/错误的注册数据。

        一个问题是用户使用一个电子邮件地址进行验证,然后在注册过程中更改它,我是这样处理的..

        当用户提交他们的电子邮件地址时,根本不会存储数据。相反,我使用$validation_code = md5(trim($email)+$secret) 来生成验证码。这样他们就无法更改实际注册表单上的电子邮件地址。电子邮件和验证码作为隐藏字段携带到末尾以验证电子邮件地址。如果邮箱地址与已验证的邮箱地址不同,注册将失败,因为 md5 不再匹配。

        直流

        【讨论】:

        • 我做的和你一模一样(很高兴找到其他人这样做。我交谈过的大多数其他开发人员都使用完整的注册然后验证)。我的表格实际上是 3 个步骤:我向他们索要电子邮件(和验证码)。当他们点击验证链接时,他们还需要输入验证码以提交该验证表,然后如果正确,他们会看到真实的用户注册表,其中包含大量数据。所以我基本上有3种形式。只有电子邮件一号和验证一号有验证码。这听起来足够好还是我可以删除中间的验证码?
        • @twitter:我添加了一些关于在验证后如何处理伪造电子邮件地址的详细信息。
        【解决方案7】:

        我在验证电子邮件和测试方面遇到了类似的问题。如果您想端到端测试电子邮件验证,请尝试EmailE2E.com — 它是免费的。

        您可以通过 API 从随机生成的收件箱发送和接收电子邮件。

        它非常适合测试 Firebase、Amazon Cognito 或其他在注册期间使用电子邮件验证码的 OAuth 提供商。此外,它还有 Java 和 JS 客户端。

        【讨论】:

          猜你喜欢
          • 2014-03-16
          • 2020-12-12
          • 2020-12-03
          • 1970-01-01
          • 2014-05-15
          • 2015-05-12
          • 2011-03-15
          • 2010-11-10
          • 1970-01-01
          相关资源
          最近更新 更多