피드로 돌아가기
Your .env File Is Probably in Your Git History (Here's How to Check)
Dev.toDev.to
Security

Your .env File Is Probably in Your Git History (Here's How to Check)

깃 히스토리에 커밋된 .env 파일을 git-filter-repo로 완전 제거하고 pre-commit 훅 + 자동 스캔으로 재유출 방지

Alex Spinov2026년 3월 25일8intermediate

Context

.gitignore에 .env를 추가해도 과거에 커밋된 .env 파일은 깃 히스토리에 영구적으로 남아있어, 레포지토리를 클론한 누구나 데이터베이스 비밀번호, Stripe 키, AWS 자격증명 등의 민감 정보에 접근할 수 있다. GitGuardian 2024 보고서에 따르면 GitHub에서 연간 1,280만 개의 새로운 시크릿이 유출되었고, 스캔된 레포지토리의 39%가 최소 1개 이상의 시크릿을 포함하고 있다.

Technical Solution

  • 히스토리 검사: git log --all --diff-filter=A --name-only 명령어로 .env, .key, credentials 등의 시크릿 유사 파일이 과거에 커밋되었는지 30초 내 확인
  • 자동 스캔 도구: Python 기반 스크립트로 AWS Key(AKIA[0-9A-Z]{16}), GitHub Token(ghp|gho_[A-Za-z0-9_]{36,}), Stripe Key(sk_live_[0-9a-zA-Z]{24,}), 데이터베이스 URL 등 8가지 패턴 검출
  • 완전 제거: git-filter-repo --invert-paths --path .env --force로 깃 히스토리 전체에서 .env 파일을 원자적으로 제거(filter-branch 대신 사용)
  • Pre-commit 훅: .env 파일이 staged 변경사항에 포함되면 커밋을 차단하는 쉘 스크립트 구현
  • 방어 계층: .env.example(플레이스홀더 포함) 체크인, Vault/AWS SSM/Doppler 같은 시크릿 매니저 도입, CI/CD 파이프라인에서 자동 스캔 실행

Impact

GitGuardian 데이터: 유출된 시크릿의 90%가 탐지 후 5일 이상 유효 상태로 남음. 아티클에서 제시된 명령어로 발견된 노출 시크릿은 모두 즉시 로테이션 필요.

Key Takeaway

시크릿 관리는 사후 대응(삭제)보다 사전 방지(pre-commit 훅, .gitignore 설정)가 핵심이며, git-filter-repo를 통한 히스토리 완전 제거와 자동 스캔 파이프라인을 조합하면 재유출 위험을 근본적으로 차단할 수 있다.


모든 깃 레포지토리 운영팀은 git log --all --diff-filter=A --name-only으로 기존 히스토리의 시크릿 유출 여부를 즉시 점검하고, git-filter-repo로 발견된 .env 파일을 제거한 후, pre-commit 훅과 .env.example 플레이스홀더를 추가하면 향후 시크릿 누출 사고를 90% 이상 예방할 수 있다.

원문 읽기