这是一个合理的用户注册流程吗?

时间:2009-02-17 20:19:44

标签: authentication web-applications

我正在为内部应用程序进行注册过程。我的初步设计如下。

我的主要问题是是否真的有必要加入registration_confirmation_code。它是否可以保护应用程序免受现实威胁或仅增加不必要的复杂性?我不确定。


  • 用户输入电子邮件地址。由于这是一个内部应用程序,因此必须是代理商地址。

  • 如果它是有效的代理商地址,应用会在用户表格中创建一个新行。

    • 该表格的列registration_confirmed默认为false。除非registration_confirmedtrue,否则应用不会让用户登录。

    • 该表格中有registration_confirmation_code列,这是一个随机生成的字符串。

  • 应用程序向用户输入的地址发送电子邮件。它包含指向允许用户确认其注册并设置其用户名和密码的页面的链接。

    该链接在查询字符串中包含用户的idregistration_confirmation_code

    http://agencydomain.com/users?id=123&registration_confirmation_code=fab49dk34nw97d

  • 通过点击链接,用户可以验证他们输入的地址是否有效以及他们是否有权访问该地址。

  • 应用程序按ID查找用户。在允许他们访问可以设置用户名和密码的页面之前,应用程序会检查...

    • registration_confirmedfalse。他们应该只能确认一次注册。

    • registration_confirmation_code请求参数匹配该用户的数据库中的值。这确保了这是目标用户的合法注册确认,而不是其他人使用随机ID尝试劫持注册的URL。

  • 如果所有内容都已检出,应用会将其带到一个页面,其中包含用于设置用户名和密码的表单。

  • 当他们提交包含有效数据的表单时,应用会将registration_confirmed设置为true并注册。

10 个答案:

答案 0 :(得分:7)

即使他们是您组织的内部人员,也不要相信他人。听起来很糟糕,但除非你和一个非常小的小组打交道,否则你的方法是明智的选择。

还有一件事,您可能希望确保他们的电子邮件是唯一的。

答案 1 :(得分:7)

另一种方法是使用集中身份验证并跳过整个注册过程。

首次登录尝试时,请从模板创建用户个人资料。

身份验证可以通过多种方式完成。理想情况下,像LDAP(或Active Directory,如果这就是你如何摆动)。也可以使用邮件服务器进行身份验证,具体取决于配置方式。

答案 2 :(得分:5)

验证从访问者处收到的任何类型的输入都是一种很好的做法。经验法则是始终确保你得到你所期望的,而不是别的。我会说你做得很好,包括电子邮件验证。

虽然是一个小问题;为什么要把它分为两个步骤?为什么不允许用户立即输入密码?这通常让用户感觉舒服。

此外,您可能需要考虑使用用户电子邮件地址的MD5哈希(或类似内容),而不是使用registration_confirmation_code。这样,您就不需要额外的字段,如果愿意,甚至可以省略ID。

-Dave

答案 3 :(得分:3)

基本上发明了OpenID系统来解决这个问题。基本上,有人来到您的网站并说“我是XYZ,您可以通过ABC检查验证”。然后你有他们的OpenID提供者(可能是你公司的服务器;如果你有LDAP,你已经大部分在那里),验证他们是谁(他们登录到OpenID提供商的网站)。如果您可以信任OpenID提供商,并且OpenID帐户尚未受到损害,那么您刚刚验证了您的用户。您可以在没有正式注册过程的情况下离开......只需将它们发送到帐户设置屏幕(假设您首次登录时需要的不仅仅是密码+电子邮件,因为这两个都是通过OpenID提供的)。 / p>

请注意,OpenID只能验证用户是否具有给定OpenID的凭据,而不是用户是唯一的,或者他们是否是他们所声称的人。但这与现有的方案没什么不同。

它的优点是不要求用户提供他们可能忘记的密码(他们可以使用OpenID提供商更改密码,并且将为所有使用OpenID的网站更改密码)。有大多数主要语言都可以使用OpenID库,而自己编写的文件也不应该太复杂。

答案 4 :(得分:2)

您似乎正在为内部应用程序花费大量精力?你期待多少欺诈?

答案 5 :(得分:1)

我喜欢使用电子邮件地址作为登录ID的网站。另外,为什么不在注册时预先获得密码?

答案 6 :(得分:1)

保护您的应用程序免受经常验证的用户的影响是一件好事,但更好的是,您可以保护随机用户免受来自您系统的电子邮件的垃圾邮件。通过要求选择加入,您确保X无法注册声称为Y的服务,并且每次您想要联系用户时都会将电子邮件发送给Y.它还让Y有机会说“什么?不,这不是我”,然后点击拒绝,发送ARF报告,或以其他方式让你知道某人有你。

如果您收集电子邮件地址,则应始终验证它们。

答案 7 :(得分:1)

您仍然需要通过电子邮件向他们发送确认代码。

根据应用程序的不同,您不希望人们使用同事的电子邮件地址注册。

答案 8 :(得分:1)

我会让用户在点击电子邮件中的链接后立即进入,并向他们发送一个他们之后可以更改的虚拟通行证。 (使用电子邮件输入用户名)

这消除了流程中的一步,使注册变得更加容易。

答案 9 :(得分:1)

您通过电子邮件确认解决的唯一“攻击”是使用随机电子邮件地址注册新帐户。

呃,如果你离开那个步骤,'攻击者'可以:

  1. 使用随机乱码地址注册帐户
  2. 使用其他人的地址注册帐户
  3. 幸运的是,在大多数应用程序中,这种攻击不是非常具有破坏性。它可以帮助攻击者在社交网络应用程序中伪造别人的身份,或者让生活稍微更容易一个spambot,或者它可以仅仅用来惹恼电子邮件地址的合法所有者 - 但那是关于它。

    我会说保留注册要求以防万一,但废弃两步过程(让用户立即创建用户名+密码)。