设计新用户确认(通过电子邮件验证)

Posted

技术标签:

【中文标题】设计新用户确认(通过电子邮件验证)【英文标题】:Designing an new user confirmation (verify via email) 【发布时间】:2011-04-20 08:56:45 【问题描述】:

我正在开发一个 ASP.Net 应用程序,它需要验证用户是合法的而不是垃圾邮件。一旦新用户输入他们的名字、姓氏、电子邮件地址,我的应用程序将发送一封电子邮件以验证用户的真实性。该电子邮件将包含一个可以确认用户帐户的链接。

我正在寻求有关电子邮件链接背后逻辑的帮助。一旦用户点击链接,会发生什么?

我有一个使用验证码的网站,但在阻止垃圾邮件(我知道你无法阻止 100% 垃圾邮件)方面运气不佳,类似于 Stopping spammers from creating accounts (reCaptcha not doing the trick)

【问题讨论】:

【参考方案1】:

正如 Rook 在下面指出的,最简单的方法是使用 Captcha。

如果您还需要验证电子邮件,请参见下文。


您可以生成一个批准 GUID 并将其传递给将用户标记为活动的电子邮件 URL。

例如,在 users 表中添加一个名为 ApprovalID 的列,并在用户注册时生成一个新的 GUID,即

您应该在此阶段将用户标记为非活动用户。

Example Guid 3F2504E0-4F89-11D3-9A0C-0305E82C3301 

然后在邮件正文中传递 User Id 和 GUID

<a href="http://www.mysite.com/verify.aspx?UserId=TheUserId&ApprovalId=3F2504E0-4F89-11D3-9A0C-0305E82C3301">Verify your account</a>

然后是一个简单的页面verify.aspx

代码背后

string UserId = Request[UserId].ToString(); // You can parse these as Guids
string ApprovalId = Request[ApprovalId].ToString();

TODO:
// Get user from database
// Match QueryString ApprovalId to Column ApprovalId
// Ask user to Log In
// Set user as active

【讨论】:

我不会在查询字符串上公开用户表的数据库 ID。 @Claudio Redi SO 暴露了用户 ID……这是网络应用程序最常见的工作方式。 如果可以避免,我不会以这种方式公开它,在这种情况下还有其他方法(我可以使用 GUID 来识别待处理的激活请求)。感觉我向外界提供的信息超出了必要的范围。 用户名暴露在所有网络上,连同 Ids、Guids.. 你是说没有一个是安全的? @Marko Ivanovski:对不起,我不是那个意思。只是说,在这种情况下,特别是我可以在不传递查询字符串上的用户 ID 的情况下实现相同的目标,所以我认为,与您所支持的相关的信息越少越好,就这样:)【参考方案2】:

发送确认链接并不能阻止垃圾邮件。通过电子邮件向某人发送带有Cryptographic Nonce 的链接只是确保他们可以接收电子邮件,机器人也可以接收电子邮件。

阻止垃圾邮件的最佳方法是使用 capthca,我建议使用 reCapthca。当用户注册您的服务时,您应该使用 capthca 提示用户。

【讨论】:

出于好奇,有没有人破解过reCaptcha? 没关系我发现了这个问题***.com/questions/448963/…

以上是关于设计新用户确认(通过电子邮件验证)的主要内容,如果未能解决你的问题,请参考以下文章

用户注册后如何发送验证/确认电子邮件

尝试使用 Django 电子邮件确认来验证用户,但是一些用户在尝试确认他们的电子邮件时收到此错误

JQuery确认密码验证不起作用

是否有与通过电子邮件向新用户发送身份验证令牌相关的 NIST 标准?

没有收到设计确认邮件

如何在 AWS Amplify for Flutter 中检查用户是不是已确认(电子邮件/电话验证)