fix: 修复注册接口和 refresh 接口账号枚举漏洞
- /register: 已存在账号返回相同成功消息,不再暴露账号是否存在 - /refresh: 将 'User not found' 改为 'Token 无效' - 防止攻击者通过错误提示枚举有效账号
This commit is contained in:
@@ -25,15 +25,14 @@ class RegisterResponse(BaseModel):
|
|||||||
async def register(req: RegisterRequest, db: AsyncSession = Depends(get_db)):
|
async def register(req: RegisterRequest, db: AsyncSession = Depends(get_db)):
|
||||||
account = req.account.strip().lower()
|
account = req.account.strip().lower()
|
||||||
result = await db.execute(select(User).where(User.email == account))
|
result = await db.execute(select(User).where(User.email == account))
|
||||||
if result.scalar_one_or_none():
|
if not result.scalar_one_or_none():
|
||||||
raise HTTPException(status_code=400, detail="账号已注册")
|
user = User(
|
||||||
user = User(
|
email=account, password_hash=hash_password(req.password),
|
||||||
email=account, password_hash=hash_password(req.password),
|
nickname=req.nickname, status="pending", group_id=req.group_id,
|
||||||
nickname=req.nickname, status="pending", group_id=req.group_id,
|
)
|
||||||
)
|
db.add(user)
|
||||||
db.add(user)
|
await db.commit()
|
||||||
await db.commit()
|
return RegisterResponse(message="注册请求已提交,等待管理员审批")
|
||||||
return RegisterResponse(message="注册成功,等待管理员审批")
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/login", response_model=TokenResponse)
|
@router.post("/login", response_model=TokenResponse)
|
||||||
@@ -92,7 +91,7 @@ async def refresh(req: RefreshRequest, db: AsyncSession = Depends(get_db)):
|
|||||||
result = await db.execute(select(User).where(User.id == user_id))
|
result = await db.execute(select(User).where(User.id == user_id))
|
||||||
user = result.scalar_one_or_none()
|
user = result.scalar_one_or_none()
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(status_code=401, detail="User not found")
|
raise HTTPException(status_code=401, detail="Token 无效")
|
||||||
if user.status == "pending":
|
if user.status == "pending":
|
||||||
raise HTTPException(status_code=403, detail="账户正在等待管理员审批")
|
raise HTTPException(status_code=403, detail="账户正在等待管理员审批")
|
||||||
if user.status == "disabled":
|
if user.status == "disabled":
|
||||||
|
|||||||
Reference in New Issue
Block a user