fix: 修复找回密码接口账号枚举漏洞

- verify-reset-code: 将'账号不存在'改为'验证码错误或已过期'
- reset-password: 将'账号不存在'改为'验证码错误或已过期'
- 防止攻击者通过错误提示枚举有效账号
This commit is contained in:
OP
2026-06-28 22:35:21 +08:00
parent ffca168dbe
commit 4f9a5af306

View File

@@ -223,7 +223,7 @@ async def verify_reset_code(
): ):
user = await _find_user_by_account_or_email(db, req.account) user = await _find_user_by_account_or_email(db, req.account)
if not user: if not user:
raise HTTPException(status_code=400, detail="账号不存在") raise HTTPException(status_code=400, detail="验证码错误或已过期,请重新获取")
key = _build_code_key(user.id) key = _build_code_key(user.id)
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key)) result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
setting = result.scalar_one_or_none() setting = result.scalar_one_or_none()
@@ -248,7 +248,7 @@ async def reset_password(
): ):
user = await _find_user_by_account_or_email(db, req.account) user = await _find_user_by_account_or_email(db, req.account)
if not user: if not user:
raise HTTPException(status_code=400, detail="账号不存在") raise HTTPException(status_code=400, detail="验证码错误或已过期,请重新获取")
key = _build_code_key(user.id) key = _build_code_key(user.id)
result = await db.execute(select(SystemSetting).where(SystemSetting.key == key)) result = await db.execute(select(SystemSetting).where(SystemSetting.key == key))
setting = result.scalar_one_or_none() setting = result.scalar_one_or_none()