为什么有些网站和程序会限制密码特征?

信息安全 Web应用程序 密码 验证
2021-08-17 12:15:48

我使用的一些网站甚至程序都有可笑的密码限制。例如,许多论坛将密码限制为约 32 个字符。其他人强制执行受限字符集。

什么会导致开发人员设置这样的限制?只要您在客户端上对密码进行初始哈希处理,服务器就无需计算大量自动生成密码的哈希值。使用此类限制似乎没有任何好处

4个回答

我认为原因与任何其他输入验证相同;以确保它在加工和储存过程中不会造成任何问题。现在,对于密码,这当然是完全错误的,因为它们应该被散列,因此既不存储也不真正以明文形式处理。

我认为任何此类限制都表明开发人员不知道他们在安全方面做什么,并且可能会以明文形式存储密码。远离。

我将同意:人们做奇怪事情的老理由。

  • 因为这在当时似乎是个好主意。 开发人员可能是善意的,但消息灵通。没有必要限制密码长度,但也许开发人员没有意识到这一点。也许开发人员甚至没有考虑过。

  • 因为它比替代品更容易。 也许他们使用的 API 不能处理任意长度的密码;这可能比使用更好的 API 更容易限制密码长度。也许他们的数据库中存在 SQL 注入缺陷,与其正确编码以避免 SQL 注入缺陷,不如将某些字符列入黑名单(例如,禁止用户在密码中包含单引号)更容易。也许出于某种原因,使用固定长度的数组比使用可变长度的字符串更容易。谁知道。

底线:这种限制没有真正好的理由。我敢肯定,我们已经习惯了商业软件经常包含各种奇怪的设计错误这一事实。它发生了。这是生活中的事实。这是“足够好”比“完美”便宜很多这一事实的结果。

限制密码长度和可能的字符集的合理原因是提示用户应用适当的密码管理技术。简而言之,如果密码很大或充满了奇怪的字符,那么这会增加用户将密码写在纸上(传统上粘在键盘下)和/或将相同密码重复用于多个系统的可能性.

从概念上讲,用户如何管理自己的密码是他的责任,与网站无关。但是,在实践中,用户在安全方面毫无头绪,不会对任何没有立即报应的事情感到厌烦(尤其是当用户是潜在客户时)。因此,网站应尽其所能保护用户。

请注意,我并不是说试图强制执行良好的密码管理任何给定站点限制密码长度的原因;这只是我在自己的网站上设想密码长度限制的一个原因(如果我要使用用户密码管理网站)。

限制允许字符集的另一个基本原理是促进互操作性:用户最好能够在各种输入设备上键入他的密码。非 ASCII 字符不适用于任何看起来像美式键盘的东西(可以在美式键盘上键入非 ASCII 字母,我一直这样做,但方法因操作系统和配置而异,并且不适合盲打,这与密码输入的习惯不同)。智能手机有更大的限制。再说一次,互操作性(在我看来)是强制执行有限字符集的一个很好的理由,但是许多网站都会有这样的限制 原因(例如,密码可以不经意地转储到 SQL 请求中而没有适当的字符串转义,这只能被描述为草率的工程)。

我以为我们有这样的问题,但今晚我的搜索功能很弱,或者它在另一个网站上。

基本上,在大多数应用程序或数据库中,对输入字符串定义有用的限制是有意义的。这使您可以在达到限制后停止输入(这可以避免溢出等),并确保您可以预测代码性能。

此外,在哈希之前验证密码时,您可能需要临时存储 - 同样,允许任意长的输入可能会导致问题。

至于为什么是32?对于大多数目的而言,这是一个合理的数字 - 32 个字符的熵是巨大的。当然,在某些环境中这还不够,但对于其中许多环境来说,证书或第二个因素(例如令牌)可能更合适。