Project

General

Profile

Actions

새기능 #518

open

[보안][P2] 백오피스/인증 하드닝 묶음 (origin guard 범위·JWT·XFF·CORS·에러노출)

Added by joungmin ko about 2 months ago. Updated about 2 months ago.

Status:
진행
Priority:
보통
Assignee:
-
Start date:
06/27/2026
Due date:
% Done:

80%

Estimated time:

Description

리뷰에서 도출된 보안 하드닝 항목(※ #508 '백오피스 무인증'은 리스크 수용됨, 아래는 그 외):

  • origin guard가 /lyrics POST만 보호 → /genres/update, /songs/*, /reports/{id}/resolve 등 다른 변경 POST 무방비 (main.py:138). 모든 비안전 메서드로 확대.
  • 7일 JWT 무효화 불가 + role in-token (AuthController:127-180). 만료 단축+refresh 또는 서버측 revocation, 권한작업은 DB role 재확인.
  • X-Forwarded-For 첫 토큰 신뢰 → rate-limit/방문자 우회 (main.py:66, ChartController:603). 신뢰 프록시 기준 파싱.
  • CORS가 prod에서 localhost:3000 허용 (CorsConfig:15). 프로파일/env로 분리.
  • 에러 str(e)/stacktrace 클라이언트·로그 노출 (main.py:1041, AuthController:148). 일반 메시지+서버 로깅.

— 6-페르소나 코드리뷰(2026-06-27)에서 도출. 소스 검증 완료. [AI 등록]

Actions #1

Updated by joungmin ko about 2 months ago

  • Status changed from 신규 to 진행
  • % Done changed from 0 to 80

커밋 a65d704. 안전·고가치 항목 처리 완료(BUILD SUCCESS, 재기동, 검증):
[x] origin guard 범위 확대 → #517에서 처리됨(모든 비안전 메서드 /lyrics,/genres,/songs,/reports).
[x] CORS 오리진 ${cors.allowed-origins} 프로퍼티화 — prod 기본값에 localhost 제외(검증: lyricsy.net 허용, localhost 차단).
[x] 클라이언트 IP: X-Real-IP 우선, 없으면 XFF 우측(실IP) 사용 — 좌측 스푸핑 무력화(Spring+백오피스). rate-limit/방문자 우회 방지.
[x] 에러 노출 차단: 백오피스 str(e)/ORA- 8곳 → 일반 메시지 + 서버 logging.
[x] 관리자 권한 in-token role 신뢰 제거 → /clearCache가 DB role(findUserRoleById) 재확인(강등 admin의 7일 토큰 무력화).

보류: JWT 만료단축+refresh 전면 재설계(대형). 백오피스 앱 인증은 #508 리스크 수용. [AI 조치]

Actions

Also available in: Atom PDF