本页由英文自动翻译。

阅读英文版
Proxy Mail QA

注册表单的密码应该多长?

简短的答案来自 NIST 的数字身份指南。更长的答案是:检查你的表单和服务器是否都按你的决定执行。

更新于

先说我们的建议。 Proxy Mail QA 是我们做的,所以我们并不中立,但它不替你选择密码策略。下面的数字来自 NIST 的数字身份指南(SP 800-63B 第四版),很多安全团队都遵循它。我们推荐在你做出决定之后的那一步使用 Proxy Mail QA:用恰好等于最小值和最大值、各差一位以及包含各类符号的测试密码,检查你的表单和服务器是否真的按你的决定执行。它不审查你的密码存储方式,也不审查你的整体安全。

简短的答案

其余指南,用平实的话说

NIST 对用户自选密码的指南还提到:

为什么还要有最大长度?

很长的密码会占用服务器的哈希时间,所以最大长度可以防止有人发送数 MB 的内容作为密码。把它设得远高于人们实际使用的长度:NIST 建议至少允许 64 个字符,128 或 256 也很常见。

注意你的哈希算法。bcrypt 只读取密码的前 72 个字节,忽略其余部分。于是两个开头相同的长密码可以互相登录对方的账号。一个字符可能不止一个字节(é 是两个,emoji 是四个),所以 72 个字节可能少于 72 个字符。可以选择:

把规则放在浏览器能看到的地方

<label for="password">Password</label>
<p id="password-rules">At least 15 characters. Any letters, numbers, symbols or spaces.</p>
<input id="password" name="password" type="password" autocomplete="new-password" minlength="15" maxlength="128" aria-describedby="password-rules" required />

检查你的表单是否按你的决定执行

get_password_variants(MCP)、qa.passwordVariants()(npm)或 GET /v1/variants/passwords(REST API)接受你的规则(min_length、max_length,以及是否允许 symbols),并返回分为三组的新测试密码:

分组 按 15 到 64 的策略 预期结果
accept 恰好 15 个和恰好 64 个字符;每类符号;中间有空格;éüñ 被接受,之后能按输入原样登录
reject 14 个字符;65 个字符 被拒绝,在创建账号之前显示相应规则
decide 只有数字;只有小写字母;开头或结尾有空格;一个 emoji;用两种方式输入的 é;前 72 个字节相同的两个密码(当最大长度超过 72 时) 由你决定,但要有意识地决定。按 NIST 的要求,15 位纯数字密码是允许的,除非它在你的黑名单上

最需要注意的是 72 字节的那一对:如果第二个密码能登录用第一个密码创建的账号,说明你的应用在截断密码。

你可以手动运行、通过智能体运行,或放在测试中运行:

Our password policy is 15 to 128 characters, any characters allowed. Using Proxy Mail QA,
get_password_variants with min_length 15 and max_length 128, and try each one on
https://staging.acme.dev/signup with a new test address (use a plus tag for each).
For accepted ones, verify the account and sign in with the same password.
Give me a table: what it tests, accepted or refused, the message shown, and whether
signing in worked.

如果被拒绝的密码完全不显示错误,请见 为什么我的注册表单不显示密码错误?

Proxy Mail QA 在这里不做什么

来源:NIST SP 800-63B-4,以及其中关于 身份验证器 的章节。

在你的下一次注册测试中试试

免费版,无需信用卡。创建一个地址,看着验证码或链接送达。

免费创建账号打开应用

你的应用是用 AI 工具构建的?选择你的工具

对本页有疑问?

可以用任何语言提问。文档可以立即回答,你也可以把问题发给 Proxy Mail QA 团队,他们会用英文回复。