피드로 돌아가기
Why I built tmpdrop: a self-hosted, expiring file drop
Dev.toDev.to
Security

72비트 엔트로피와 CSP 샌드박스로 구현한 고보안 파일 공유 시스템

Why I built tmpdrop: a self-hosted, expiring file drop

Kin Pan Ho2026년 5월 29일5intermediate

Context

퍼블릭 파일 호스팅 서비스의 불투명한 데이터 보존 정책과 예측 가능한 URL 구조로 인한 데이터 노출 위험 분석. 특히 업로드된 파일을 통한 Stored XSS 공격 가능성과 리소스 남용(Abuse)에 대한 제어 수단 부재를 핵심 문제로 식별.

Technical Solution

  • 9바이트 random base64url 인코딩을 통한 72비트 엔트로피 확보로 URL Enumeration 공격 차단
  • 60초 주기 Loop 기반의 TTL Reaper 구현을 통한 물리적 파일 및 DB 레코드의 완전 삭제 보장
  • Content-Security-Policy(default-src 'none'; sandbox) 적용 및 X-Content-Type-Options: nosniff 설정을 통한 브라우저 내 스크립트 실행 원천 봉쇄
  • SHA-256 해시 기반의 IP 저장 방식을 통한 개인정보 보호와 Rate Limit(30 req/min) 및 파일 크기 제한(25 MB)으로 서비스 가용성 확보
  • Fastify와 SQLite 조합의 단일 테이블 구조를 채택하여 아키텍처 복잡도를 최소화하고 데이터 백업 효율성 극대화
  • MIME 타입 화이트리스트 대신 서빙 레이어의 CSP 샌드박스 방어를 채택하여 사용자 편의성과 보안성 동시 확보

1. 입력 단계의 검증(Allowlist)보다 출력 단계의 격리(CSP/Sandbox)가 보안 효율성이 높음

2. 단순 기능 구현 시 데이터 모델을 최소화하여 SQLite와 같은 단일 파일 DB로 운영 오버헤드 감소

3. 임시 데이터 처리 시 Soft-delete 대신 TTL 기반의 Hard-delete 프로세스를 설계하여 스토리지 최적화

4. 익명 서비스 설계 시 원본 IP 대신 Truncated Hash를 사용하여 추적 가능성과 개인정보 보호 사이의 균형 유지

원문 읽기