보안 안내
현장록에 실제로 적용되어 있는 보안 조치를 공개합니다. 아직 적용하지 않은 항목은 마지막 절에 그대로 적었습니다.
시행일 2026년 7월 27일
1. 계정과 인증
- 비밀번호는 argon2id로 해시해 저장합니다. 원문은 저장하지도, 로그에 남기지도 않습니다.
- 로그인 세션은 서버가 발급한 쿠키로 유지합니다. 이 쿠키는 HttpOnly라 자바스크립트로 읽을 수 없고, 운영 환경에서는 Secure 속성이 붙어 HTTPS로만 전송됩니다.
- 세션 쿠키는 SameSite=Lax로 설정해 외부 사이트가 만든 요청에는 붙지 않습니다.
- 가입과 비밀번호 재설정은 이메일 인증을 거칩니다. 인증 링크는 일정 시간이 지나면 만료됩니다.
- 직원 계정은 사업장 관리자가 발급하며, 최초 로그인 시 비밀번호를 새로 정합니다.
2. 요청 위조(CSRF) 차단
쿠키 기반 인증은 브라우저가 쿠키를 교차 사이트 요청에도 자동으로 붙이기 때문에 위조 요청에 노출됩니다. 서버에서 두 겹으로 막습니다.
- 상태를 바꾸는 모든 요청(POST·PUT·PATCH·DELETE)의 Origin을 허용 목록과 대조하고, 일치하지 않으면 거부합니다.
- 외부 사이트의 <form> 하나로 만들 수 있는 요청 형식(urlencoded·multipart·text/plain)은 아예 받지 않습니다.
3. 사업장 간 데이터 격리
- 모든 데이터는 사업장 식별자를 함께 가지며, 조회·수정 시 서버가 요청자의 소속을 대조합니다.
- 소속 판단은 클라이언트가 보낸 값이 아니라 서버 세션에서 가져옵니다. 요청을 조작해 다른 사업장 데이터에 접근할 수 없습니다.
- 역할(대표·관리자·배차·담당자)에 따라 접근 가능한 기능이 서버에서 제한됩니다.
- 다른 사업장 데이터가 새지 않는지 확인하는 교차 격리 테스트를 자동으로 실행합니다.
4. 파일 업로드
- 업로드 가능한 형식은 JPEG·PNG·WebP·PDF로 제한합니다.
- 확장자나 선언된 형식만 믿지 않고 파일 앞부분의 실제 시그니처를 확인합니다. 형식을 위장한 파일은 거부하고 저장소에서 삭제합니다.
- 파일 하나당 크기 상한은 20MiB입니다.
- 파일은 브라우저에서 저장소로 직접 전송되며, 짧은 시간만 유효한 서명 URL로 해당 파일 한 건에만 접근이 허용됩니다.
- 저장된 파일의 실제 경로는 응답에 포함하지 않습니다. 열람은 항상 권한 확인을 거친 서버 경로로만 이루어집니다.
5. 고객 공개 링크
완료보고서와 작업 진행 링크는 고객이 로그인 없이 여는 공개 표면이라 별도로 다룹니다.
- 링크 토큰은 원문이 아닌 해시로 저장합니다.
- 사업장이 링크에 PIN을 걸 수 있습니다. PIN도 해시로 저장하며, 반복 시도에는 횟수 제한이 걸립니다.
- 링크에는 만료일을 설정할 수 있고, 언제든 철회할 수 있습니다.
- 존재하지 않는 링크와 철회·만료된 링크의 응답을 동일하게 만들어 링크가 실재하는지 추측할 수 없게 합니다.
- 공개 화면에는 원가·마진·내부 메모·내부 식별자가 애초에 담기지 않습니다.
- 열람 기록(시각, 접속 IP의 해시, 브라우저 정보)을 남깁니다.
6. 기록과 추적
- 계정 생성·권한 변경·비활성화 등 신원 관련 변경을 감사 기록으로 남깁니다.
- 정산 금액 확정과 잠금 해제, 구독 상태 변경도 각각 기록합니다.
- 감사 기록의 접속 IP는 원문이 아닌 해시로 저장합니다.
- 프록시를 거친 요청의 실제 접속 IP를 판별할 때 신뢰할 단계 수를 고정해, 위조된 헤더로 접속 IP를 속일 수 없게 합니다.
7. 운영과 배포
- 운영 환경에서 필수 설정이 빠져 있으면 서버가 기동하지 않습니다. 잘못된 설정으로 조용히 뜨는 상황을 막기 위한 것입니다.
- 운영 여부 판단을 두 개의 환경 변수로 교차 검증합니다. 한쪽만 설정되었거나 값에 오타가 있으면 기동을 중단합니다.
- 운영에 배포되는 모든 커밋은 타입 검사·린트·단위 테스트·통합 테스트·빌드를 통과해야 합니다. 하나라도 실패하면 배포가 중단됩니다.
- 서비스는 순차적으로 배포하며, 앞 단계가 정상 응답을 시작한 것을 확인한 뒤에만 다음 단계로 넘어갑니다.
- 새 배포가 데이터베이스에 연결하지 못하면 트래픽이 넘어가지 않고 이전 버전이 계속 서비스합니다.
- 배포 전 CI 에서 알려진 의존성 취약점을 검사합니다.
8. 아직 적용하지 않은 것
과장하지 않기 위해 현재 없는 것도 적습니다. 아래 항목은 적용 계획이 있으나 아직 도입하지 않았습니다.
- 2단계 인증(OTP)
- 외부 기관의 모의해킹·보안 점검 수검
- 실시간 침입 탐지와 이상 접근 자동 차단
- 고객이 직접 내려받는 형태의 전체 데이터 내보내기 기능(현재는 문의로 처리합니다)
취약점 신고
서비스에서 보안 취약점을 발견하셨다면 parkyj@nextdev.co.kr로 알려주세요. 확인 후 회신하고 조치 결과를 공유하겠습니다. 신고 내용을 공개하기 전에 조치할 시간을 주시면 감사하겠습니다.
개인정보 처리와 관련한 문의는 개인정보 처리방침을 참고해 주세요.