我正在开发一个登录模块。我只是想知道你可以允许的用户名和密码的首选长度是什么?为什么?
提前致谢!
答案 0 :(得分:8)
对用户名设置任意大小限制没有多大意义。但是如果您需要(例如,对于数据库列宽度),您应该将其设置得足够大,以便将来不会后悔。 (我工作的地方,帐户名称是8个字符,所有员工的前两个字符都相同......呃!)
对密码设置大小限制是一个不好的想法。
这是一个坏主意的主要原因是用户密码越长,它的熵就越多,因此猜测的难度就越大。通过限制密码长度,您可能会诱使用户使用不良密码。 (不幸的是,不是典型的用户需要很多诱导......)
第二个原因是它建议您将密码存储在数据库表中。这将是一个很大的错误,因为如果系统的安全性受到损害,它可能会使用户的密码暴露出来。您应该在数据库中存储用户密码的盐渍加密哈希值(可以具有有限的大小),并通过对其进行散列并将其与存储的哈希值进行比较来检查提交的密码。
如果您正在谈论最小长度(密码),您应该关注熵而不是密码长度。 (由20“1”组成的密码不如随机生成的6个字符的序列安全。)
我想我会回答这个问题。种子加密哈希打开了我的脑海,我不再担心长度,而且它更安全。谢谢!
(应该是咸的...我的坏。)
我只想纠正对上述内容的误解。长密码不一定是好密码(根据示例)。但这并不意味着你应该“不用担心长度”。过短的密码(甚至是随机密码)太容易猜到了。
如果您的目的是阻止/阻止用户设置易于猜测的密码,那么您应该使用某种密码质量检查程序来清除用户设置/重置其中的“坏”密码她的密码。
谷歌搜索“密码熵”或“密码熵措施”将为您提供一些线索。这是附近的一个:
(注意:加密哈希方法是关于不存储密码...不是关于密码长度。不管你的软件如何处理密码,密码都不安全。)
答案 1 :(得分:3)
除非您担心最小化数据库大小,否则用户名限制不是大问题;但如果这是一个问题,我怀疑很多用户的用户名长度超过64个字符。
至于密码,我不喜欢设置严格的上限;因为我在将数据存储到数据库之前理想地使用密码的盐水哈希,因此它将具有固定长度(由于散列函数),因此限制密码长度不会减小数据库大小。因此,如果有人想使用随机生成的128个字符的密码,他们可以直接前进 - 这样更加安全。
答案 2 :(得分:2)
对我来说,我创建了一个用户名varchar(25)和密码varchar(100)为什么? 因为我已经创建了很多帐户,我发现创建用户名的最大长度是21而密码是26但是加密密码时使用大的密码要好得多:)
希望它可以帮到你
答案 3 :(得分:-3)
在我看来,每个人都对自己的登录负有自己的责任,而网络应用程序会惹恼有人不必要的规则,这不是我会使用的。所以,请自己动手。
总的来说,如果你不卖东西而且不安全的登录会影响你自己的数据,它应该尽可能地保存,意味着一个RANDOM密码,(例如:http://www.pctools.com/guides/password/)当然存储在加密的数据库中
编辑:加密到目前为止还不够,散列更好但仍然不是最好的方法。哈希和腌制或哈希拉伸要好得多。好的帖子是例如Best way to store password in database或https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/。