注册密码的最佳做法?

时间:2015-02-18 08:54:53

标签: security email authentication passwords registration

我有一个用户注册帐户的网站。在注册字段中,表单字段为:

  • 名称
  • 电子邮件
  • 确认电子邮件
  • 用户名

但是没有密码字段。当他们点击提交时,他们会通过电子邮件发送一个非常复杂的密码,例如 LHJVjhwnv%uu5 RbWM9!jeDZUQb

我已经呼吁我的开发人员改为使用户可以在注册表单上设置自己的密码。要在表单上确认密码,然后向他们指定的电子邮件发送确认链接。然后通过这种方式,他们至少可以登录到他们的帐户并通过确认链接验证他们的电子邮件。或者如果他们没有,每次他们登录网站时都可以提醒他们验证他们的电子邮件等,否则他们在网站上做不了多少(例子)。这样,即使他们没有确认链接,他们也可以仍然将其帐户电子邮件更新为其他电子邮件并重新发送。至少在此阶段,他们可以登录自己的帐户,而不是根本不是

我从开发者收到的回复如下

  

“在注册时提供密码的问题是   你会有大量的假帐户。所以刚刚注册的人   一个不存在的电子邮件地址。至少通过电子邮件验证   你在一定程度上证明了用户的存在。如果他们使用错误的电子邮件注册,他们可以重新注册。“

我想问你所有人,如果开发人员采用的当前方法是否可以接受?

如果没有,我可以用什么理由说服开发人员改变?“

我试图解释以下内容

  • 每天有9-10人注册,然后直接使用后面的“密码重置”表单。此表单涉及他们输入他们注册的电子邮件地址,然后通过电子邮件向他们发送设置新密码的链接。因此,如果他们设置了新密码 ,为什么不让他们首先在注册表单上设置密码呢?为什么每天有9-10人使用密码重置字段,直接注册后?我很确定这是因为他们似乎正在努力处理这些复杂的密码(我并不反对),这些密码正在通过电子邮件发送给他们并且丢失了密钥或字符,或者似乎没有意识到复制/粘贴或类似的东西那。如果他们可以设置自己的密码第一次,他们就不需要立即运行到密码重置字段,因为他们的电子邮件密码不起作用。我觉得每天总是密码重置电子邮件是多么奇怪。自从我开始使用Mandrillapp跟踪外发电子邮件以来,并不适合所有人,但每天只有9-10人。这将由下一点支持。

  • 每天至少有2-3人填写联系表,表明他们收到的密码不起作用。如果他们可以自己设置,那么都可以避免。可能还有更多,只是不打扰接触。

  • 在近8000个帐户中,有50%从未登录过。我强烈怀疑包含密码的注册电子邮件是否发送到垃圾文件夹/垃圾邮件文件夹。尽管我有适当的SPF,DKIM等设置。 2个月前,我决定开始使用Mandrill发送邮件以确保它进入收件箱,但仍然至少有1-2人每天说他们收到他们的电子邮件..这让我感到困惑。如果他们可以定义自己的密码,他们就不必担心通过电子邮件等待密码,或者无法完全获取密码。这进一步凸显了我最初的担忧。

感谢您的时间!

3 个答案:

答案 0 :(得分:1)

我假设您已经有一个有效的密码重置页面,所以您可以使用相同的代码进行注册:

  1. 让用户注册他的电子邮件。
  2. 向用户发送带有令牌的链接,令牌的哈希值存储在数据库中。
  3. 如果用户点击该链接并且令牌有效,欢迎他并让他输入自己的密码。
  4. 这正是您已经拥有的密码重置功能,您的网站不再安全,因为攻击者也可以使用密码重置功能。<​​/ p>

    当然弱密码是个问题,所以拒绝弱密码是必须的。这与您在密码重置页面上必须执行的操作相同。对于密码重置,您也不会发送明文密码。

    未确认的帐户可以在一段时间后删除,这意味着用户没有对其执行任何操作。如有必要,用户可以再次注册。这仅在用户在进行确认之前不允许登录时才有效,支持上述步骤。当然,如果这个确认很重要,那将取决于网站。

答案 1 :(得分:0)

不在邮件中发送密码的主要原因是安全:邮件不是安全媒体。如果您在那里输入密码,那么很多人都可以看到它 - 考虑允许人们使用您的服务而无需任何类型的密码,而不是理解我的意思。

允许用户选择自己密码的主要缺点是95% will use 123456 or password

大多数大型网站都采用这种方法来平衡安全性,业务需求和舒适度:

  • 允许用户设置自己的密码。拒绝最简单的(有这个库)。注意:复杂的密码规则会驱使客户离开。
  • 通过邮件发送确认链接。
  • 在点击链接之前不允许登录。
  • 如果他们还是尝试登录,请告诉他们必须先点击链接,再提供“再次发送确认链接”链接,以防第一封邮件丢失。

答案 2 :(得分:-1)

  

我已经呼吁我的开发人员改为使用户可以在注册表单上设置自己的密码....

这会让您面临过多的弱密码和重用攻击。重复使用已经过实证研究和reported between 50% and 76%。其他学术研究表明nearly all users (almost 100%) reuse passwords

因此,分配密码有助于解决主要的实际问题。在您分配密码后,您将受到相同的攻击,但是因为用户可能会在其他站点上重复使用分配的密码。


  

...   如果开发人员采用的当前方法是可以接受的,我想问你们所有人吗?

是的,只要密码符合安全要求,它就可以接受。我甚至更喜欢它,特别是当用户选择的密码 而不是 检查错误的密码列表时。

错误的密码列表非常重要,因为我们知道攻击者会使用它们。由于过去的所有漏洞,我们有数以百万计的密码(我提到密码重用是一个大流行问题吗?)。这些名单很容易找到,一位研究人员最近发布了他的6,000,000+名单。请参阅How I Collect Passwords


Aaron对于电子邮件和纯文本是正确的。您实际上可以放置另一个安全控件来限制曝光。即,要求您的邮件服务器使用SSL / TLS或连接失败。

或者,生成密码并在屏幕上将其显示给用户。指示用户打印密码,以免他们忘记密码。我甚至告诉我的用户将它们写下来并将它们放在钱包或钱包中。

主要威胁是基于网络的攻击者试图通过弱/受伤/错误密码未经授权访问服务器。因此,带外/频道外的电子邮件并不是一个太大的问题。丢失的钱包或钱包不是太大的问题。令人担忧的是基于网络的攻击者猜测密码或使用{username,passwords}元组来破坏其他网站。


  

每天有9-10人注册,然后直接使用“密码重置”表格。此表单涉及他们输入他们注册的电子邮件地址,然后通过电子邮件向他们发送设置新密码的链接。

好的,这是一个安全缺陷,因为用户可以绕过安全控制。

为了它的价值,我经常使用随机密码生成器为帐户生成密码。我甚至都不打算把它们写下来。当我需要访问该帐户时,我只需通过“忘记密码”流程。

这就是这些东西给我带来的价值。每个该死的网站都希望用户管理帐户和密码。我已经厌倦了消耗能量来管理所有账户,所以我甚至不会浪费周期。


  

在注册时提供密码的问题是您将拥有大量虚假帐户。所以只注册一个不存在的电子邮件地址的人。至少通过电子邮件验证,您在一定程度上证明用户存在​​。如果他们使用错误的电子邮件注册,他们可以重新注册

好的,所以这是一个不同的问题。通常使用CAPTCHA减轻BOT注册。我从未真正研究过用于真实用户/虚假账户的内容。

假账户有什么好处?在我看来,用户正试图怀孕一半。他们要么有帐户,要么没有帐户。


  

在近8000个帐户中,有50%从未登录过。我强烈怀疑包含密码的注册电子邮件是否发送到垃圾文件夹/垃圾邮件文件夹。尽管我有适当的SPF,DKIM等设置。

嗯,这是一个不同的问题(你应该通过测试确认)。这说明了为用户显示密码并告诉他们打印页面。


密码管理的主题还有很多。你应该阅读Peter Gutmann的Engineering Security第7章。


  

我已向我的开发人员提出上诉......

最后,你是老板。如果开发人员或承包商没有遵循指示或编码要求,请解雇他们。在我请求某人为我提供服务之前,我会被诅咒。

程序员只有十几个,你可以在像Rent-A-Coder这样的地方找到很多。印度人和巴基斯坦人的工作几乎为零(在某些情况下,每天不到10美元)。我不知道他们如何能够如此努力地生存下去......