"""인증 API — 코드 리뷰 testcase: 보안 취약점 포함""" from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.models.employee import Employee from app.database import get_db from pydantic import BaseModel router = APIRouter() class LoginRequest(BaseModel): emp_no: str password: str @router.post("/login") def login(req: LoginRequest, db: Session = Depends(get_db)): """ 보안이슈: 1. 패스워드 평문 비교 (bcrypt/argon2 미사용) 2. 무차별 대입 공격(brute force) 방어 없음 3. JWT 토큰 발급 없이 평문 응답 4. 로그인 실패 시 구체적 에러 메시지 (user enumeration) """ emp = db.query(Employee).filter(Employee.emp_no == req.emp_no).first() if not emp: raise HTTPException(status_code=401, detail="직원 번호를 찾을 수 없습니다") # user enumeration if emp.password != req.password: # 평문 비교 raise HTTPException(status_code=401, detail="패스워드가 틀렸습니다") return { "success": True, "emp_id": emp.id, "name": emp.name, "salary": str(emp.salary), # 급여 응답에 포함 }