为啥要限制密码的长度?
Posted
技术标签:
【中文标题】为啥要限制密码的长度?【英文标题】:Why restrict the length of a password?为什么要限制密码的长度? 【发布时间】:2010-10-16 16:32:35 【问题描述】:我刚刚注册了一个网站以购买一些商品,当我尝试输入我的(相当安全的)密码时,我被告知它太长了,我应该输入一个介于 5 到 10 个字符之间的密码!那有什么意义呢?谁做出这样的决定?当然,理想的密码会是一个非常长且复杂的密码吗?为什么人们坚持尝试限制您可以使用的密码类型?
您是否必须实现对网站的登录?是否出于安全目的登录(例如购买商品)。您对用户密码设置了哪些(如果有)限制?你做出这个决定的原因是什么?
【问题讨论】:
好吧,不要开始抱怨,但我认为您可以使用的用户名也是如此。有时您的用户名只能是 4 到 8 个字符。谁会想到那些东西?为什么不让某人能够输入他的电子邮件地址或他们喜欢的任何内容。 长/复杂的密码可以防止暴力攻击,仅此而已。恶意软件、记录器、网络钓鱼、中间人和社会工程攻击可以轻松击败最佳密码策略。 为了让用户偶然发现这个问题,有人问了一个类似的问题,它有自己的一组合法答案,可以在这里找到:***.com/questions/988504/… 我使用 KeePass 生成并自动填写我的所有密码(20 个字符的字母数字 + 符号)。我的银行是唯一限制我的密码大小/字符的地方。很伤心,不是吗? @Travis 在我反复向与我的银行关联的所有可见电子邮件发送脚本化的客户服务投诉之前,密码被限制为 【参考方案1】:这可能是因为他们将您的密码存储为纯文本并试图节省空间,但也可能是因为他们试图阻止人们将密码设置得太长然后忘记它们,这意味着公司必须发送一封带有密码的电子邮件,这有点麻烦。
【讨论】:
【参考方案2】:长度限制可能是出于存储空间的考虑,但它可能是一个非常糟糕的反脚本措施。如果我的银行告诉我我的密码太短而不是太长,我会更有信心。每当我被告知我的密码太短,或者不允许使用“特殊”字符时,我都会想,“哦,他们一定没有在他们的字典中找到我的密码……facepalm。” p>
应该允许任何字符。应该鼓励而不是劝阻传递短语。它们比神秘的密码更容易记住,也更难破解,因为它们不会出现在查找表中。
【讨论】:
+1 表示短语。我喜欢密码短语。如此容易记住,并且自然包含非字母数字字符。只要确保它们不是非常明显。 @Welbog:我以前公司的系统管理员是著名的 Trekkie(他有一个星际舰队学院的保险杠贴纸),他使用的密码是“spock”。有些东西告诉我“长寿和繁荣”只会稍微安全一些。 :) 我认识的一位系统管理员使用他的粉丝化名作为密码,并写在他办公桌旁边的海报上。他曾在一家国际警务机构工作。啊,快乐的日子 ;-)【参考方案3】:看起来特别愚蠢,因为任何半体面的网站都不会在其数据库中存储明文密码,它们会存储该密码的单向哈希(根据所使用的算法,它始终是一个设定的长度,例如 sha1 是160 位摘要),然后在登录时重新散列该密码,以确保新散列的密码与存储的密码匹配。
除了前端设计美学 - 我同意,强制最大密码长度没有任何意义。出于显而易见的原因,最小长度完全不同。
【讨论】:
【参考方案4】:最常见的原因是前端集成了一些不能处理超过给定字符数的旧遗留系统。
【讨论】:
+1。嗯,最常见的有效原因......我猜现实中最常见的原因是简单的愚蠢。 而不是正确地做前端并研究如何透明地与后端集成,他们只是将问题拖到新系统中?! @JeeBee 企业遗留系统的沼泽足以让成年男子哭泣,甚至是他们的完整团队。我不是在提倡这种解决方案,但如果这是您设法保持一半一致性的唯一方法呢? .. 一些将密码存储为纯文本的旧遗留系统?【参考方案5】:可能是他们用于加密的算法不适用于大密码,或者他们只有有限的存储空间来存储密码。我知道,这两个原因都很糟糕,但这是可能的。
如果我要制定密码规则,那只是为了保护用户,例如强制他们使用至少一个特殊字符和数字或混合大小写。
【讨论】:
【参考方案6】:一些(设计不佳的)网站有最大密码长度,原因很简单:这是他们在数据库中存储密码的全部空间。他们很有可能根本没有散列或处理它,这意味着它以纯文本形式存储。像这样的网站,我每次都使用一次性密码。这是一个糟糕的设计,不幸的是人们仍在使用它。
【讨论】:
【参考方案7】:以这种方式限制密码的唯一可能原因是简化数据库表,这是一个不好的原因。应该允许使用长而复杂的密码!
此外,网站根本不应该存储密码,而是存储加密哈希。由于哈希是固定大小的,这使得数据库非常简单,存储需求也很小。
【讨论】:
【参考方案8】:限制密码的大小是为了节省存储空间。这几乎表明您的密码被简单地存储在他们的数据库中,因此他们想要限制其大小。否则这只是一个限制,因为实施者不知道更好。无论哪种方式,这都是一个不好的迹象。
您可能想联系该网站的管理员并询问他们。他们应该存储哈希值,而不是密码,无论密码有多大,它们总是相同的大小。您输入的密码大小以及您被允许输入的字符域确实应该没有限制。
【讨论】:
这是古代软件的一个很好的指标。当您的银行希望 len(password) 非常不好的信号。 '密码的大小确实应该没有限制'应该更正为,'密码的大小确实应该没有上限限制'。 16 个字符到底怎么合理?我通常的密码比这要长得多。 “合理”的限制在 1024 到 65536 之间。 所以你的意思是限制我的密码的安全性是可以的,因为大多数用户对安全性一无所知? 如果他们关心安全性,他们不应该保存任何人的密码,而是制作一个加盐哈希。这些哈希通常是固定长度的,所以密码有多长并不重要。以上是关于为啥要限制密码的长度?的主要内容,如果未能解决你的问题,请参考以下文章
BCryptPasswordEncoder 密码长度是不是限制超过 72 个字符?