我应该有最大密码长度吗?

信息安全 应用安全 Web应用程序 验证 密码 密码策略
2021-08-26 04:11:38

我正在创建一个 webapp,我的身份验证方法的一部分是密码长度。

我应该放一个吗?(比如说,50 个字符?)或者我应该输入一个最小长度(目前为 6 个)。

不输入最大长度有问题吗?

3个回答

您应该使用安全算法对密码进行哈希处理,而不是以明文形式存储。无论输入字符串的长度如何,散列函数都会产生一个恒定的输出大小。

使用最小长度和其他一些质量规则是一个好主意,因为它有助于防止懒惰。

如果您害怕拒绝服务攻击,您可以为普通输入字段设置服务器端限制,例如 1000 字节。不太可能有人想使用这么长的密码。

我的建议:1,024 字节。

密码大小的限制是由于过时的技术要求而存在的限制。现代密码存储应该依赖于散列,这使得密码存储字段的大小固定,无论密码长度如何。我们不希望看到 1mb 的密码,因为这只会表明有人试图造成拒绝服务。我认为我永远不会看到有人使用 1,024 个字符(或更长)的密码。我认为这是一个足够小的值来防止任何真正的 DOS 并且足够高的值在任何合理的情况下都不会达到。

这取决于您使用的消息摘要功能。对于大多数人(sha-256,甚至 md5、sha1 等)来说,这并不重要。但是,如果您使用的是 bcrypt,则 bcrypt 有 55 个字符的限制。因此,如果您的 salt 是 27 字节,则您可以使用 28 字节的密码。

附带说明一下, CWE-521确实要求您拥有最大密码长度。但是它没有说明最大值,并且从安全规定来看,我看不出它可能是 512kbyte 或更多的任何理由。