Skip to content

05 Security and Privacy

hywznn edited this page Jul 21, 2026 · 5 revisions

보안과 개인정보

기본 원칙

FOWOCO는 근로자 정보를 다루므로 기능보다 먼저 최소 수집, 사업장 격리, 승인, 만료, 감사를 코드로 강제합니다.

UI에서 숨기는 것만으로는 보안이 아닙니다. 서버의 조회·상태 전이·토큰 검증에서 차단해야 합니다.

정보 분류

등급 예시 처리
공개·비민감 지원 언어 목록, Task 유형 일반 설정·응답 가능
업무 최소정보 worker_id, 표시 이름, 언어, 체류 만료일 권한·사업장 검사 후 사용, AI 최소 입력 가능
개인정보 전화번호, 생년월일, 상세 주소 최소 수집, 마스킹·접근 제한
고위험 민감정보 외국인등록번호, 여권번호, 계좌번호 AI 전송 금지, 필요 시 분리·암호화
Secret JWT Secret, DB 비밀번호, LLM API Key Secret Manager/환경변수, 로그·Git 금지

사업장 격리

  • 인증 토큰의 company_id를 신뢰의 시작점으로 사용합니다.
  • 클라이언트가 보낸 company_id로 권한 범위를 결정하지 않습니다.
  • Repository 조회 조건에 ID와 company_id를 함께 넣습니다.
  • 목록·상세·수정·Audit 조회 모두 같은 원칙을 적용합니다.
  • 다른 사업장 리소스는 존재 여부를 노출하지 않도록 403/404 정책을 일관되게 정합니다.
  • A/B 두 사업장을 만든 통합 테스트로 격리를 검증합니다.

역할

기능 ADMIN HR VIEWER Worker Link
사용자 관리 가능 불가 불가 불가
근로자·서류 수정 가능 가능 불가 불가
업무 조회 가능 가능 제한 조회 해당 업무 최소정보
업무 승인·완료 가능 가능 불가 불가
제한 응답 제출 불가 불가 불가 유효 링크만 가능

근로자는 로그인 계정을 갖지 않습니다.

JWT와 Refresh Token

  • Access Token은 짧은 수명으로 설정합니다.
  • Refresh Token은 DB에 원문 대신 해시를 저장합니다.
  • Refresh 시 기존 토큰을 폐기하고 회전합니다.
  • 로그아웃·계정 비활성화 시 Refresh Token을 폐기합니다.
  • JWT Payload에 여권번호·전화번호 같은 개인정보를 넣지 않습니다.
  • Token과 Authorization 헤더를 애플리케이션 로그에 출력하지 않습니다.

Worker Link

  • 충분히 긴 암호학적 난수 토큰을 생성합니다.
  • DB에는 토큰 해시만 저장합니다.
  • expires_at, revoked_at, 사용 횟수와 정책을 관리합니다.
  • 재발급 시 이전 링크를 즉시 폐기합니다.
  • 승인된 Task에서만 링크를 발급합니다.
  • 공개 응답은 해당 안내와 제한된 행동만 포함합니다.
  • 변조·만료·폐기 토큰은 동일한 안전한 오류로 응답합니다.
  • URL 전체가 로그에 남지 않도록 웹서버·애플리케이션 로그를 점검합니다.

AI 전송 전 점검

AI에 보낼 수 있는 기본 필드:

  • worker_id
  • display_name
  • language
  • nationality가 업무상 필요한 경우
  • expiry_date
  • contract period가 업무상 필요한 경우
  • 서류 유형과 상태

보내지 않는 필드:

  • 외국인등록번호
  • 여권번호
  • 전화번호
  • 계좌번호
  • 원본 신분증 이미지
  • 전체 근로계약서 원문

민감정보가 입력문에 포함될 수 있으므로 DTO 제한뿐 아니라 전송 전 패턴 탐지·제거도 수행합니다.

저장과 로그

  • 민감정보는 기본 Worker 테이블과 분리합니다.
  • 복원이 필요한 값은 애플리케이션 또는 DB 수준 암호화를 적용합니다.
  • 목록 응답은 항상 최소 필드 DTO를 사용합니다.
  • AuditLog에는 변경 요약만 저장하고 민감 원문을 넣지 않습니다.
  • AiInvocation에는 Provider 응답 전문 대신 검증 결과와 오류 유형을 기록합니다.
  • 예외 추적 시스템에 Request Body가 자동 첨부되지 않도록 점검합니다.

승인 경계

AI 분석 → 후보 생성 → HR 검토 → HR 승인 → Worker Link 발급
  • AI 분석 성공만으로 승인되지 않습니다.
  • 승인 전 Worker Link API는 거부됩니다.
  • 승인 후 제목·대상·날짜·서류가 바뀌면 재승인이 필요합니다.
  • 완료증빙이 필요한 Task는 증빙 없이 완료할 수 없습니다.
  • 생성·수정·승인·링크·응답·완료를 AuditLog에 남깁니다.

PR 보안 체크리스트

  • 모든 조회가 company_id 범위를 검사하는가?
  • 새로운 DTO에 불필요한 개인정보가 없는가?
  • 로그에 토큰·Secret·원문 개인정보가 없는가?
  • AI 입력에 금지 필드가 없는가?
  • 역할 부족, 타 사업장, 만료 토큰 테스트가 있는가?
  • 중요한 상태 변경이 AuditLog와 함께 저장되는가?
  • 승인 전 발송 경계를 우회할 경로가 없는가?
  • .env, Key, 인증서가 커밋되지 않았는가?

관련 이슈

Clone this wiki locally