📋 문제 설명
현재 /api/public/posts/{id} 공개 API에서 게시글 작성자의 이메일 주소(userEmail)가 그대로 노출되고 있습니다. 이는 비로그인 사용자도 접근 가능한 엔드포인트에서 개인식별정보(PII)를 유출할 수 있는 보안 위험을 내포하고 있습니다.
🔍 현재 상황
문제가 되는 코드
파일: src/main/java/hanium/modic/backend/domain/post/service/PostService.java:114
@Transactional(readOnly = true)
public GetPostResponse getPostForPublic(final Long id) {
// ... 다른 코드 ...
final String userEmail = userEntity.getEmail(); // ⚠️ 이메일 그대로 노출
// ... 다른 코드 ...
return GetPostResponse.of(userName, hasUserImage, userImage, userEmail, postEntity, postImages, likeCount, isLikedByCurrentUser);
}
영향 범위
- 엔드포인트:
GET /api/public/posts/{id} - 인증 없이 접근 가능
- 데이터: 게시글 작성자의 실제 이메일 주소
- 위험성: 개인정보 수집, 스팸 메일, 피싱 등에 악용 가능
💡 해결 방안
🎯 권장안 A: 이메일 비노출 (추천)
공개 API에서는 이메일을 완전히 제거하여 개인정보를 보호합니다.
@Transactional(readOnly = true)
public GetPostResponse getPostForPublic(final Long id) {
// ... 다른 코드 ...
- final String userEmail = userEntity.getEmail();
+ // 공개 API: 이메일 비노출(PII 보호)
+ final String userEmail = null;
// ... 다른 코드 ...
}
🔄 권장안 B: 이메일 마스킹 처리 (대안)
부분적 정보 제공이 필요한 경우 마스킹 처리를 적용합니다.
// 예시: user@example.com → u***@example.com
final String userEmail = maskEmail(userEntity.getEmail());
📝 수정 필요 파일
Backend
Test Files
수정 예시 (테스트)
// Before
.andExpected(jsonPath("$.data.userEmail").value(mockUser.getEmail()));
// After (권장안 A 적용 시)
.andExpected(jsonPath("$.data.userEmail").isEmpty()); // null 검증
🏷️ 기대 효과
- ✅ 개인정보 보호: 비로그인 사용자로부터 이메일 주소 보호
- ✅ 보안 강화: PII 유출 위험 제거
- ✅ GDPR 컴플라이언스: 개인정보 처리 최소화 원칙 준수
- ✅ API 일관성: 공개 API vs 인증 API의 명확한 차별화
🔗 관련 정보
참고: 현재 구현은 기존 인증 API의 응답 구조를 재사용하고 있어 이메일이 포함되지만, 공개 API의 특성상 개인정보 보호를 우선시해야 합니다.
📋 문제 설명
현재
/api/public/posts/{id}공개 API에서 게시글 작성자의 이메일 주소(userEmail)가 그대로 노출되고 있습니다. 이는 비로그인 사용자도 접근 가능한 엔드포인트에서 개인식별정보(PII)를 유출할 수 있는 보안 위험을 내포하고 있습니다.🔍 현재 상황
문제가 되는 코드
파일:
src/main/java/hanium/modic/backend/domain/post/service/PostService.java:114영향 범위
GET /api/public/posts/{id}- 인증 없이 접근 가능💡 해결 방안
🎯 권장안 A: 이메일 비노출 (추천)
공개 API에서는 이메일을 완전히 제거하여 개인정보를 보호합니다.
🔄 권장안 B: 이메일 마스킹 처리 (대안)
부분적 정보 제공이 필요한 경우 마스킹 처리를 적용합니다.
📝 수정 필요 파일
Backend
src/main/java/hanium/modic/backend/domain/post/service/PostService.java:114getPostForPublic()메서드에서userEmail처리 방식 변경Test Files
src/test/java/hanium/modic/backend/domain/post/service/PostServiceTest.javagetPostForPublic관련 테스트에서 이메일 검증 로직 수정src/test/java/hanium/modic/backend/web/post/controller/PublicPostControllerTest.java수정 예시 (테스트)
🏷️ 기대 효과
🔗 관련 정보
참고: 현재 구현은 기존 인증 API의 응답 구조를 재사용하고 있어 이메일이 포함되지만, 공개 API의 특성상 개인정보 보호를 우선시해야 합니다.