什么是常见的用户名和密码策略

时间:2010-01-07 19:10:30

标签: security authentication

编辑2010年1月18日,

是否有任何不允许在密码中使用的符号?

=========================================

您好,

我想知道在网站上创建新帐户的用户名/密码的'常见'政策。

这是我目前所拥有的:

===========对于用户名==================
长度在6到20个字符之间 不允许有空格 用户名区分大小写

可以包含lettle,数字和符号

* Uppercase letter (A-Z)
* Lowercase letter (a-z)
* Digit (0-9) 
注册后

无法更改

===========密码=============
6-20个字符长 可以包含lettlers,数字和符号

* Uppercase letter (A-Z)
* Lowercase letter (a-z)
* Digit (0-9)
* Special character (~`!@#$%^&*()+=_-{}[]\|:;”’?/<>,.) 

密码在数据库中加密 密码可以在请求时发送到电子邮件地址

由于

10 个答案:

答案 0 :(得分:5)

对于用户名,您可以将其区分大小写,但我可能不允许“类似”匹配。 例如,在网站上将这些用户名作为所有差异帐户会很烦人: 路易吉 LUIGI 路易吉 路易

这可能会导致悲伤(人们使用类似的帐户名来嘲笑/骚扰某人)。而这只会令人困惑。当你有类似的角色时会引起问题ilike l I o 0 o O。

我宁愿使用电子邮件地址作为用户名,因为他们会记住它。很多不同的网站都有不同的用户名很烦人。电子邮件地址保证是唯一的:)

密码限制似乎很好。至于那只是强迫你想要强制密码的问题。虽然,我不会通过电子邮件发送密码。电子邮件不安全,此处首选重置密码方法。

答案 1 :(得分:4)

  

密码在数据库中加密   密码可以发送到电子邮件   请求地址

加密?哈希?是。如果它是哈希值,则无法从哈希中获取密码以将其发送给用户,这是应该的。

如果用户忘记密码,请使用临时密码重置密码,然后通过电子邮件发送给用户,以便他们定义新密码。

永远不要在您的数据库中存储纯文本或加密密码;如果您的软件无法解密,那么攻击您的数据库的攻击者也可以这样做。

答案 2 :(得分:4)

  1. 您应该让用户更改其用户名。停止它们的原因是什么?
  2. 你真的需要让用户名区分大小写吗?
  3. 不要只加密密码并将其发送给用户。使用盐渍哈希来存储它,如果用户忘记它,为它们生成一个新的。
  4. 根本不打扰密码限制,只是让人们可以更容易地看到人们可以通过暴力攻击尝试的密码搜索空间。相反,只需使用人们不应使用的密码列表(字典单词等)。如果我想用一整本日本小说作为我的密码,那应该是我的选择。如果你正确地将它们存储为盐渍哈希,那么无论我的原始密码有多长,哈希总是会保持相同的大小。

答案 3 :(得分:1)

  1. 您是否需要用户名来区分大小写?
  2. 请求时不要发送密码。而是向他们发送密码重置链接。这样人们就不会抱怨他们的帐户可能会受到损害,即使有些人可以访问用户数据库。

答案 4 :(得分:1)

越来越常见的一种做法是不要在您的网站上拥有用户名和密码,而是要依赖OpenID或其他身份验证提供程序。

在电子邮件中发送用户密码是一种必须停止的可怕习惯。如果用户忘记密码,请随机发送密码,并要求他更改密码。请不要在电子邮件中发送他的密码(众所周知,大多数用户在许多应用/网站上使用相同的密码)。

答案 5 :(得分:0)

如果您不需要,请不要存储...

OpenID不是一个选项吗?

如果你这样做,那就强搞......

我喜欢使用电子邮件地址作为“用户名”的想法,而不需要在以后存储它以进行通信等。对于密码,鼓励“强”的。 6-12个字符的随机套管和数字穿插。

存储纯文本的好理由不多......

然后我会哈希密码。

答案 6 :(得分:0)

为什么要对用户名强制执行最大限制?如果有人想要 - 或者出于什么原因 - 为他们的用户名使用特别长的字符串,它会严重影响您,还是危及您的数据库?

如果你正在加密密码,那么上限实际上没有意义,因为哈希(你使用的任何函数)将产生一个或多或少的一致长度字符串,而不管我对哈希函数的理解 - 长度。我还考虑对已知的彩虹表运行提交的 - 和散列/加密 - 密码,以尝试强制使用强密码。但这可能会,也可能不会取决于具有可搜索彩虹表的此类站点的可用API或许可条款。

答案 7 :(得分:0)

一种方法是不对密码设置许多限制,但有一个用户无法使用的密码列表。以下是无法在Twitter上使用的密码列表:

http://www.techcrunch.com/wp-content/uploads/2009/12/Twitter-banned-passwords.txt

这会过滤掉最弱的密码,同时仍然让用户选择他们想要的密码。

答案 8 :(得分:0)

我认为你使用的政策是好的。但是你永远不应该将某人的密码存储在数据库中。我建议添加用户名(如果它无法更改;否则可能是id)并构建一个哈希值。总是如果你检查一个密码,你再次添加用户名并构建校验和(sha512没问题)并测试它是否与存储在数据库中的相同。也许添加一个恒定的随机盐是一件好事。 (也像用户名一样)

你可能会得到类似sha512(“myname_password_4235329659”)的内容。

这使得使用rainbowtable几乎不可能。

答案 9 :(得分:0)

我认为你应该这样缩小范围:

 Use:

 Email Address as Username;

 Password must be strong by forcing a rule as follows:

 Alphabets(in small or capital),
 Numbers 
 Characters(#,&,*, !...)
 must include at least one of these and must be 6 or more in length 
 Case sensitivity must be applied when signing in

 Hint: Use a password generator as an assistance

 A security question and answer for later recovery of username or password or 
 simply use birth date validation for this