보안 검토(4개 영역 병렬)에서 확인된 실제 취약점 수정:
[HIGH] 무인증 계정 탈취 연쇄 — find-id로 아이디 획득 → 아이디+이름만으로 비밀번호 재설정
→ 요청 2번으로 멘토 권한 탈취 가능했음 (공개 서버, 시드 이름 예측 가능)
- 무인증 POST /api/auth/reset-password 제거
- find-id 응답 아이디 마스킹 (mentor1 → me****1)
- 대체 경로 신설: POST /api/auth/change-password(본인, 현재 비번 재인증),
POST /api/mentor/users/{id}/reset-password(멘토 전용, 학생 계정만)
- 프론트: 재설정 폼 → 안내로 교체, 비밀번호 변경 페이지·멘토 재설정 UI 추가
[MEDIUM] 세션 고정 — 로그인 시 세션 ID 미재발급 (직접 구현이라 formLogin의 방어가 빠져 있었음)
- changeSessionId() 추가. 세션 부재 시 IllegalStateException 나는 것 확인해 가드 포함
[교재 품질] 코드와 어긋난 주석 수정 — 학생이 주석 신뢰를 잃는 것이 가장 큰 손해
- Badge: 라벨표 이중화로 REVIEWED가 화면마다 다르게 표시되던 실제 버그 수정(PASSED 추가)
- QuizResult: 정렬 없이 '가장 최근'을 가정하던 주석 → OrderBy 명시로 사실화
- runJs: (0, eval) 설명 → 실제 코드(new Function)에 맞게 수정
- runJs: Worker는 fetch가 되므로 '멘토 화면에서 학생 코드 실행 금지' 회귀 경고 명시
운영 검증: 로그인 200 / 무인증 재설정 401 / 학생→멘토API 403 / 멘토 재설정 200
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>