-
Notifications
You must be signed in to change notification settings - Fork 0
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 |
|---|---|---|---|---|
| 사용자 관리 | 가능 | 불가 | 불가 | 불가 |
| 근로자·서류 수정 | 가능 | 가능 | 불가 | 불가 |
| 업무 조회 | 가능 | 가능 | 제한 조회 | 해당 업무 최소정보 |
| 업무 승인·완료 | 가능 | 가능 | 불가 | 불가 |
| 제한 응답 제출 | 불가 | 불가 | 불가 | 유효 링크만 가능 |
근로자는 로그인 계정을 갖지 않습니다.
- Access Token은 짧은 수명으로 설정합니다.
- Refresh Token은 DB에 원문 대신 해시를 저장합니다.
- Refresh 시 기존 토큰을 폐기하고 회전합니다.
- 로그아웃·계정 비활성화 시 Refresh Token을 폐기합니다.
- JWT Payload에 여권번호·전화번호 같은 개인정보를 넣지 않습니다.
- Token과 Authorization 헤더를 애플리케이션 로그에 출력하지 않습니다.
- 충분히 긴 암호학적 난수 토큰을 생성합니다.
- DB에는 토큰 해시만 저장합니다.
-
expires_at,revoked_at, 사용 횟수와 정책을 관리합니다. - 재발급 시 이전 링크를 즉시 폐기합니다.
- 승인된 Task에서만 링크를 발급합니다.
- 공개 응답은 해당 안내와 제한된 행동만 포함합니다.
- 변조·만료·폐기 토큰은 동일한 안전한 오류로 응답합니다.
- URL 전체가 로그에 남지 않도록 웹서버·애플리케이션 로그를 점검합니다.
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에 남깁니다.
- 모든 조회가 company_id 범위를 검사하는가?
- 새로운 DTO에 불필요한 개인정보가 없는가?
- 로그에 토큰·Secret·원문 개인정보가 없는가?
- AI 입력에 금지 필드가 없는가?
- 역할 부족, 타 사업장, 만료 토큰 테스트가 있는가?
- 중요한 상태 변경이 AuditLog와 함께 저장되는가?
- 승인 전 발송 경계를 우회할 경로가 없는가?
-
.env, Key, 인증서가 커밋되지 않았는가?