Add verified administrator controls and upload abuse limits
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# 검증 기록
|
||||
|
||||
현재 적용 범위는 [파일·링크 통합 수정안](TRANSFER_UX.md)이다. 아래 초기 단계의 텍스트 관련 기록은 수정 이전 검증 이력이다.
|
||||
현재 전송 범위는 [클립보드 전송 수정안](CLIPBOARD_TRANSFER.md)의 파일·링크·일반 텍스트다. 아래 단계별 기록은 당시 구현의 검증 이력이며 현재 동작은 최신 항목을 따른다.
|
||||
|
||||
## Phase 1 — 2026-10-08
|
||||
|
||||
@@ -181,3 +181,13 @@
|
||||
- 네이티브 파일 선택창의 숨김/복귀 때 위치 재등록보다 POST가 먼저 나가던 상황을 수정 전 브라우저에서 재현했다. 위치 기반 대상은 위치 수신 확인까지 기다리며 같은 네트워크의 잠깐 끊긴 대상은 서버가 재접속 상태로 구분한다. 현재 연결을 최대 5초 기다리고 같은 요청 키로만 재시도해 첫 클릭의 초안·파일을 유지한다. 권한 없음·차단·다른 공간은 재시도하지 않는다. 연결 확인 중 버튼 안내를 적용했다. 개인정보 보호를 위해 숨김 시 좌표 제거는 유지한다.
|
||||
- 로그아웃 후 메인 기기 화면을 표시한다. 사용자 폴더의 owner-info.json에는 검증된 기본 접속 IP·국가·지역·도시만 업로드 요청 시 기록하며 원문·좌표·인증 값은 기록하지 않는다. 제공되지 않은 지역과 과거 파일은 추정하지 않는다. 최대 20개·기본 7일의 기록만 유지하고 마지막 원본/대기 업로드가 사라지면 제거한다. 공개 URL·일반 보관함에서는 제공하지 않는다.
|
||||
- API 114개·전체 빌드·타입 검사 통과. 실제 Chromium에서 파일 선택창 위치 복귀 대기와 단일 요청, 같은 네트워크의 재접속 중 자동 재시도·동일 키·파일 유지·모바일 수락 다운로드, 보관함 원본 재전송·수동 삭제·로그아웃 후 메인 화면을 확인했다. 운영 Docker의 사용자 폴더·확장자·호스트 파일 가시성·재시작 후 재다운로드·수동 삭제·8MiB 조각 재개·Unicode 텍스트와 인증 세션 보존·SQLite integrity도 통과했다. 실제 NAS 배포는 수행하지 않았다.
|
||||
|
||||
## 2026-10-14 서비스 관리·국가/IP 차단·업로드 자원 제한
|
||||
|
||||
- 인증된 활성 `hello@noname.company`에만 더보기 관리자 메뉴와 서버 API 권한을 제공한다. 일반·비로그인·미인증·정지 계정, 이메일 로컬 파트 대소문자가 다른 별도 계정과 위조 CSRF의 접근을 거절하는 테스트를 통과했다. 관리자 API는 본문 파싱 전에도 권한을 확인한다.
|
||||
- 파일 목록·업로드 주체·최근 기본 지역/IP·전체 용량·예약·디스크 여유·진행 중 요청을 표시한다. 두 실제 파일의 커서 페이지 이동, 원본 삭제와 수신 항목 무효화·실제 다운로드 404·용량 회수, 삭제 확인/취소와 관리 이력 만료를 확인했다. 파일 내용 열람/다운로드 API는 추가하지 않았다. 화면은 수동 갱신만 사용한다.
|
||||
- 신규 업로드 중지/재개·동시 처리 기본 4개·로그인/비로그인 전체 파일과 예약 합계 기본 20GiB를 적용했다. 실제 조각 PUT의 본문 처리 전 동시 요청 제한과 Retry-After, 주체당 2개, 중단/완료 후 자리 반환, 여러 업로드 주체의 원자적 전체 예약과 기존 개인 한도, 중지 전 수락 업로드·링크 유지와 신규 임시 저장 거절을 확인했다. 기존 파일 한도·5GiB 최소 디스크 여유와 조각 전송을 유지하며 들어오는 요청에 5분 타임아웃을 적용했다.
|
||||
- 국가 및 IPv4/IPv6·CIDR 규칙을 HTTP·Socket.IO에 적용한다. 검증된 Cloudflare 제공 국가만 사용하고 위조 전달 헤더·미제공 지역은 추정하지 않는다. 실제 차단 응답과 연결 거절, 매핑 IPv4/IPv6 대역, 현재 관리자 자신을 차단하는 규칙의 거절을 검증했다. 진행 중 요청의 차단 시 abort/destroy·처리 자리 회수도 검증했다. 기본 차단 목록은 비어 있다.
|
||||
- 설정 변경은 DB 트랜잭션과 감사 이력으로 저장하고 변경 버전 충돌을 거절한다. DB 오류 롤백 뒤 적용 중 정책 보존과 별도 인스턴스 재로드, 관리 기록 30일 정리를 확인했다. 업로드 주체 정보는 마지막 원본/대기 업로드가 사라지면 제거하고 빈 사용자 폴더도 정리한다.
|
||||
- API 123개·추가 페이지 이동/별도 계정 격리를 포함한 관리자 9개·전체 타입 검사와 빌드·포맷 검사를 통과했다. 실제 Chromium에서 관리자 전용 메뉴·일반 계정 API 403·지역/IP 표시·일시 중지/재개·규칙 저장·파일 삭제 확인과 이력·390px 모바일 배치/16px 입력·로그아웃 후 권한 제거를 확인했다. 기존 파일/링크 전송·보관함·주변 위치 검색·첫 파일 전송 재접속 브라우저 회귀도 통과했다.
|
||||
- 최종 운영 Docker 이미지에서 추가 관리 테이블의 자동 마이그레이션, 관리자 인증과 설정 재시작 보존, 기존 파일/텍스트·세션·인증·8MiB 조각 재개·SQLite integrity·사용자별 경로·호스트 파일 수동 삭제를 확인했다. 격리 자원만 사용하고 종료 후 제거했다. `docker-compose.yaml`과 실제 NAS 컨테이너·볼륨·자료·Cloudflare 규칙은 변경하거나 재배포하지 않았다. 도시 정보는 Cloudflare 전달 설정이 있어야 제공되며 대규모 네트워크 공격은 별도 앞단 대응이 필요하다.
|
||||
|
||||
Reference in New Issue
Block a user