在我的注册过程中,用户注册,他们会通过电子邮件收到一个验证链接,如果他们点击它,他们的帐户才会被验证。但是这种验证方法对机器人来说是不是太容易了?
我认为电子邮件可以由机器人创建,但可以肯定的是,如果验证只是点击一个链接,它也可以由机器人自动完成。我不确定,因为我没有这样做,也不想测试它只是为了知道,但我的问题是这种验证方法是不是有缺陷?
我正在考虑将验证码作为文本发送给用户,他们必须手动将其复制/粘贴到表单中,并且表单受验证码保护。这是一个更好的主意吗?有什么缺陷吗?
在我的注册过程中,用户注册,他们会通过电子邮件收到一个验证链接,如果他们点击它,他们的帐户才会被验证。但是这种验证方法对机器人来说是不是太容易了?
我认为电子邮件可以由机器人创建,但可以肯定的是,如果验证只是点击一个链接,它也可以由机器人自动完成。我不确定,因为我没有这样做,也不想测试它只是为了知道,但我的问题是这种验证方法是不是有缺陷?
我正在考虑将验证码作为文本发送给用户,他们必须手动将其复制/粘贴到表单中,并且表单受验证码保护。这是一个更好的主意吗?有什么缺陷吗?
大多数建议都是关于验证电子邮件和使用验证码,当然你应该这样做,但请记住,这些方法都不是完全安全的。
机器人可以轻松“点击”任何电子邮件中的链接。对于机器人作者来说,复制和粘贴一些东西会稍微烦人,但不会太多。通常电子邮件验证就是这样 - 电子邮件验证。
您验证电子邮件是否可能由任何尝试注册的人控制,但当然,由于电子邮件通常通过不受信任的 TCP 以明文形式发送,并且依赖于不安全的 DNS,所以在我们都使用 DNSSEC 并加密所有流量之前,它将是易于嗅探电子邮件和欺骗服务器和客户端。需要意识到的重要一点是,使用电子邮件验证,您只能在一定程度上确信与您交谈的任何人或任何人确实是该电子邮件地址的用户。
回答一个只有人类应该知道答案的问题会更加烦人,但考虑到您可能不会有无限数量的问题,机器人作者可能会将未知问题重定向给真正的人类,并在任何问题重复时使用缓存的答案不止一次。回答像我最近在一些网站上看到的“什么是 12+8”之类的问题作为图灵测试完全适得其反,因为这个问题对于机器人来说实际上比对人类来说更容易。可能最受欢迎的图灵测试是验证码,但在这里你也必须意识到它们可能会被愚弄。
首先,人们展示了绕过 CAPTCHA 的方法,例如,参见 DEFCON 18 的Decoding reCAPTCHA演讲。许多 CAPTCHA 更容易被机器人破译,因为它们是由易于逆向的算法生成的。reCAPTCHA 失真也很简单,但它们使用的词是真实的扫描词,对于 OCR 来说很难,所以原则上它对机器人来说应该更难,但情况并非总是如此。
并且还可以在其他网站上显示您想猜测的验证码,并让人们为您回答。还有一个实际上解决验证码的人的黑市,所以如果你的机器人作者不介意为一打支付两美分,那么无论对人类来说有多难,实际的人类无论如何都会解决它。
底线是,使用任何 bot 停止技术将始终是 bot 所有者(垃圾邮件发送者或任何想要在您的系统中注册大量用户的人)愿意花费时间和精力的折衷方案和金钱来做这件事,以及你要容忍给你的用户带来多少不便,因为最终你将永远无法进行任何自动化测试来区分人类和机器人,而不会真正惹恼人类并疏远残疾人(有没有人曾经试图猜测 reCAPTCHA 的音频版本?),但您的机器人实际上可能是人力驱动的,所以可以说不是真正的机器人而是机器人。
这是一场军备竞赛,您的诚实用户正在为此付出代价。请记住所有这些。
问题是您要验证什么?当您发送指向电子邮件地址的链接时,您可以知道注册该帐户的人可以访问该电子邮件地址。除此之外,它不会告诉你任何关于它们的信息。
所以,是的,机器人可以创建一个帐户,并将其用于注册。如果您想阻止机器人,那么是的,您需要添加验证码。请注意,将代码添加到复制/粘贴几乎没有意义——这对机器人来说很容易,而且对验证码也没有任何好处。
与往常一样,安全性和便利性通常是相互竞争的。
电子邮件中的链接只是验证它是一个活动的电子邮件地址。是的,机器人很容易处理这个问题。但是您的服务是否如此有价值以至于机器人会攻击它?
验证码始终是确保您的用户是人类的方法。与之相关的额外编码和挫折是一种权衡。
最后,让事情尽可能简单,但不要简单。
正如已经指出的那样,您只需进行一些 CAPTCHA 验证。
我的建议是在您的应用创建用户帐户并发送验证电子邮件之前进行人工验证。您的网站的附加值不能轻易被强制发送垃圾邮件验证电子邮件并创建虚假等待验证帐户。
如果你这样做,链接没有错。
是的,机器人可以输入电子邮件并检查回复。我还听说过让机器人在图像识别和回答验证码方面做得更好的努力,尽管我不能肯定它们有多好。如果你真的很担心,我会选择:
最后一个可能被证明是消除机器人的最佳方法,但它也会限制注册您网站的人。此外,您拥有的验证越多,您就越会惹恼用户,并且您会增加让他们注册的障碍,这也可能是一个很大的缺点。就个人而言,我认为验证码是机器人保护与用户不便之间的良好平衡。
您是仅验证电子邮件还是进行完整注册?
我总是先验证电子邮件帐户。然后一旦验证完成注册过程。
所以在验证电子邮件步骤中添加验证码。
换句话说,要求用户输入他们的电子邮件地址,输入验证码并提交表单。
这样,只有真实的人才能收到发送的验证电子邮件。
当然,它并不能阻止人类机器人。
直流
这也意味着您不需要存储失败/错误的注册数据。
一个问题是用户使用一个电子邮件地址进行验证,然后在注册过程中更改它,我就是这样处理的。
当用户提交他们的电子邮件地址时,根本不会存储数据。相反,我使用它$validation_code = md5(trim($email)+$secret)
来生成验证码。这样他们就无法更改实际注册表单上的电子邮件地址。电子邮件和验证码作为隐藏字段携带到末尾以验证电子邮件地址。如果电子邮件地址与已验证的电子邮件地址不同,则注册将失败,因为 md5 不再匹配。
直流
我在验证电子邮件和测试方面遇到了类似的问题。如果您想端到端测试电子邮件验证,请尝试EmailE2E.com - 它是免费的。
您可以通过 API 从随机生成的收件箱发送和接收电子邮件。
它非常适合测试 Firebase、Amazon Cognito 或其他在注册期间使用电子邮件验证码的 OAuth 提供商。此外,它还有 Java 和 JS 客户端。