密码安全
帮助用户保护其密码安全
密码的安全性取决于其被猜测或暴力破解的难度。理论上,密码越长越难被猜中,同时使用更广泛的字符集(如数字、大小写字母和符号)也能提高安全性。
下表显示了破解用户账户所需尝试的_最少_猜测次数:
所需字符组合 | 长度 | 猜测次数 |
---|---|---|
仅数字 | 8 | ~ 227 |
数字+字母 | 8 | ~ 241 |
数字+大小写字母 | 8 | ~ 248 |
数字+大小写字母+符号 | 8 | ~ 252 |
然而现实中,密码并非总是随机生成。它们常包含姓名、单词、日期和常见短语的变体。攻击者可利用这些特征大幅减少猜测次数。
目前已有数亿(且持续增长)的已知泄露密码库。攻击者会使用这些密码列表自动化登录尝试(即凭据填充攻击),从而窃取或访问敏感用户数据。
密码强度与泄露密码防护
为帮助保护您的用户,Supabase Auth 允许您精细控制项目中使用的密码强度。您可以在项目的Auth设置中配置以下选项:
- 设置较大的最小密码长度。建议不要低于8个字符。
- 设置密码中必须包含的字符类型。推荐使用最强选项,要求包含数字、小写字母、大写字母和特殊符号。
- 防止使用已泄露的密码。Supabase Auth 使用开源的HaveIBeenPwned.org Pwned Passwords API来拒绝那些已被泄露且被恶意攻击者知晓的密码。
泄露密码防护功能仅在专业版(Pro Plan)及以上套餐中提供。
额外建议
除了选择合适的密码强度设置和防止使用泄露密码外,建议您要求用户:
- 使用密码管理器来存储和生成密码
- 避免在不同网站和应用间重复使用密码
- 避免在密码中使用个人信息
- 启用多因素认证(MFA)
常见问题
密码是如何存储的?
Supabase Auth 使用强大的密码哈希函数bcrypt来存储用户密码的哈希值。仅存储哈希后的密码,无法通过密码哈希冒充用户。每个哈希值都附带一个随机生成的盐参数以增强安全性。
哈希值存储在auth.users
表的encrypted_password
列中。该列名其实是个误称(密码学哈希不是加密),但为了向后兼容而保留。
强化的密码要求将如何影响现有用户?
现有用户即使当前密码不符合新的强化要求,仍然可以使用该密码登录。不过,如果他们的密码未达到更新后的标准,在signInWithPassword
过程中会遇到WeakPasswordError
错误,该错误会解释密码为何被视为弱密码。这一变更同样适用于新用户和修改密码的现有用户,确保所有人都遵循增强的安全标准。