繁体   English   中英

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

[英]Is this a reasonable user registration process?

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

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


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

  • 如果它是有效的代理商地址,则app会在users表中创建一个新行。

    • 该表有一个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请求参数匹配该用户的DB中的值。 这确保了这是目标用户的合法注册确认,而不是其他人用试图劫持注册的随机ID命中URL。

  • 如果一切都结束,应用程序会将他们带到一个页面,其中包含用于设置用户名和密码的表单。

  • 当他们使用有效数据提交表单时,app会将registration_confirmed设置为true并进行注册。

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

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

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

首次登录尝试时,从模板创建用户配置文件。

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

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

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

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

戴夫

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

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

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

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

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

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

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

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

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

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

这消除了该过程的一个步骤,并使登记更容易。

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

如果你离开那一步,“攻击者”可以:

  1. 使用随机乱码地址注册帐户
  2. 使用其他人的地址注册帐户

幸运的是,在大多数应用程序中,这种攻击不是非常具有破坏性。 它可以帮助攻击者在社交网络应用程序中伪造别人的身份,或者让生活稍微容易一点,或者它可以用来惹恼电子邮件地址的合法所有者 - 但这就是它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM