禁止数字作为密码中的第一个字符的原因?

信息安全 密码策略
2021-08-13 13:23:50

当我申请 DHL(德国包裹递送服务)的服务时,他们有迄今为止我见过的最奇怪的密码指南:

  • 至少 8 个字符,但不超过 13 个。
  • 仅使用“有效”字符。给定的字符不包括'or "or ;or \,这是我首先尝试在 SQL 注入中使用的东西。
  • 至少一个大写和小写字母。
  • 一个数字,但不是开头

为什么要禁止将数字作为第一个字符?在一个完美的世界中,他们会使用bcryptor对密码进行加盐和哈希处理,scrypt并且所有对熵上限的限制都可以轻松解除。显然,他们的存储系统很弱,VARCHAR(13)或者是遗留代码和货物崇拜管理的可悲组合。

我仍然无法理解关于密码开头没有出现数字的规则。为什么要这样做?我唯一能想到的是 PHP 将表达式计算"1Test" == 1为真。否则编程语言中的标识符也不能以数字开头。或许这就是“有效章程”的由来?

有人能猜出 DHL 在后端做什么吗?

3个回答

您是否可能想多了,而他们只是试图清除许多常见的易于猜测的密码?

我认为您在自己的分析中非常准确。

长度要求几乎可以肯定后端存储密码而不对其进行哈希处理。这可能意味着在处理代码中的密码时,存在密码在某处被评估的风险。正如您自己指出的那样,PHP 将评估"1Test" == 1true,从而导致密码以数字开头的各种问题。

我看不出任何其他原因,尽管在网站上运行的特定代码当然可以有任意数量的特殊情况。

这些要求通常是密码存储和处理错误的标志。

我唯一能想到的就是以下几点。许多编程语言禁止在变量名的开头使用数字。他们可能会从密码中创建一个变量名。但这将是一个非常奇怪的后端选择!