← 목록
엔터프라이즈 2026-06-14 2KB 읽기 2분

크라우니엔터프라이즈 멀티테넌시 격리 강화 (2026-06-14)

개요

5000명 전사 배치 시 회사코드 누락 = 타사 데이터 조회 가능 취약점 차단. 서버.한선 + proxy.js 두 레이어에 회사코드 강제 격리 적용.

무엇을 했는지

서버.한선 변경사항

  1. _토큰회사DB 맵 추가 — 토큰→회사코드 1:1 바인딩 저장소
  2. 토큰생성(사용자ID, 회사코드) — 회사코드를 토큰에 바인딩
  3. 토큰회사(토큰) 새 함수 — 토큰의 회사코드 반환
  4. /api/auth/logincompany 필드 필수화, 없으면 400
  5. 요청처리() 내 격리 가드 추가:
- 인증된 요청 + /api/ 경로 → X-Company-Code 헤더 검증 - 토큰 회사코드 vs 요청 X-Company-Code 불일치 → 403 차단 - 쓰기(POST/PUT/DELETE)에서 X-Company-Code 누락 → 403 차단

proxy.js 변경사항

  1. proxyToHanseon()companyCode 파라미터 추가, X-Company-Code 헤더 주입
  2. proxyWithRetry() — companyCode 전달
  3. extractCompanyFromJwt() 새 함수 — JWT payload에서 company 추출
  4. enforceCompanyIsolation() 새 함수 — ERP 라우트 감지 + 회사코드 불일치 403
  5. 메인 핸들러 — 프록시 전 격리 체크 + companyCode 주입

관련 파일

  • /Users/ef/crowny-enterprise/서버.한선 — 메인 한선씨 서버 (3159줄)
  • /Users/ef/crowny-enterprise/proxy.js — Node.js 프록시 (1641줄)
  • /Users/ef/crowny-enterprise/격리강화.한선 — RPN 정본 동반 파일

검증 결과 (포트 19701 테스트)

테스트기대결과
company 없이 로그인400400 PASS
company 포함 로그인200 + token200 PASS
동일회사 GET200200 PASS
교차회사 GET (토큰A → 회사B)403403 PASS
쓰기 X-Company-Code 누락403403 PASS
교차회사 쓰기403403 PASS

잔여 이슈

  • 실배포는 라이브 9701/9700 세션(게이트웨이 세션)이 담당
  • 클라이언트(web/index.html)는 로그인 시 company 필드 주입 필요
  • 기존 admin-demo-token은 company=crowny 바인딩됨 (데모용)
  • 셀코어 init OOB 에러는 기존 pre-existing, 이번 작업 무관