🧑💻 오늘의 개발하면서 생긴 크고 작은 이슈사항을 기록해주세요
💚 어떤 기능인가요?
인가·인증 계층의 취약점 5건을 수정합니다. 로그인만 하면 남의 글을 지울 수 있고, 30일짜리 토큰으로 보호된 API를 호출할 수 있는 상태였습니다.
1. 커뮤니티 IDOR — 게시글·댓글 수정/삭제에 작성자 검증이 없습니다.
2. JWT 토큰 혼용 — Refresh Token 은 role 클레임 없이 발급되는데 필터가 타입을 구분하지 않아 ROLE_null 로 인증이 성립합니다. 반대로 refreshTokens() 는 Access Token 도 받아줍니다.
3. 비밀번호 해시 노출 — UserDto.password 가 직렬화 대상이라 회원가입 응답에 BCrypt 해시가 실려 나갑니다.
4. 사용자 열거 — 미가입 404 / 비밀번호 오류 401 로 가입 여부가 드러납니다. 탈퇴 계정도 로그인됩니다.
5. 어드민 인증 구조 파손 — 필터는 /admin 을 스킵하는데 SecurityConfig 는 hasRole("ADMIN") 을 요구해 항상 403. 컨트롤러는 STATELESS 정책 아래 SecurityContextHolder 를 직접 조작해 인증이 요청과 함께 소멸하고, 템플릿 엔진이 없어 뷰 렌더링 자체가 불가능합니다.
✅ To Dos
🧑💻 오늘의 개발하면서 생긴 크고 작은 이슈사항을 기록해주세요
💚 어떤 기능인가요?
인가·인증 계층의 취약점 5건을 수정합니다. 로그인만 하면 남의 글을 지울 수 있고, 30일짜리 토큰으로 보호된 API를 호출할 수 있는 상태였습니다.
1. 커뮤니티 IDOR — 게시글·댓글 수정/삭제에 작성자 검증이 없습니다.
2. JWT 토큰 혼용 — Refresh Token 은
role클레임 없이 발급되는데 필터가 타입을 구분하지 않아ROLE_null로 인증이 성립합니다. 반대로refreshTokens()는 Access Token 도 받아줍니다.3. 비밀번호 해시 노출 —
UserDto.password가 직렬화 대상이라 회원가입 응답에 BCrypt 해시가 실려 나갑니다.4. 사용자 열거 — 미가입 404 / 비밀번호 오류 401 로 가입 여부가 드러납니다. 탈퇴 계정도 로그인됩니다.
5. 어드민 인증 구조 파손 — 필터는
/admin을 스킵하는데SecurityConfig는hasRole("ADMIN")을 요구해 항상 403. 컨트롤러는 STATELESS 정책 아래SecurityContextHolder를 직접 조작해 인증이 요청과 함께 소멸하고, 템플릿 엔진이 없어 뷰 렌더링 자체가 불가능합니다.✅ To Dos
typ클레임(access/refresh) 도입, 필터는 Access 만 허용,iss/jti추가@JsonProperty(WRITE_ONLY)로 비밀번호 응답 차단/api/admin/**)로 통합