【问题标题】: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)

【问题讨论】:

    标签: asp.net security spam-prevention


    【解决方案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 提示用户。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-17
    • 2014-01-04
    • 2016-03-03
    • 1970-01-01
    • 2020-08-19
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多