블로그 개인 정보 유출 방지

이 글은 블로그 글쓰기에서 개인 프라이버시를 보호하고 민감한 정보 유출을 방지하는 실용적인 팁과 모범 사례를 소개합니다.

인기 있는 무료 오픈소스 플랫폼인 GitHub Pages는 많은 블로그에서 사용됩니다.
하지만 무료 버전은 공개 레포지토리로 설정해야 공개 접근이 허용됩니다. 레포지토리가 공개되면 초안으로 표시된 글도 Git 레포지토리에서 접근할 수 있습니다.
공개된 글에는 민감한 정보가 거의 포함되지 않지만, 오픈소스 블로그의 소스 레포지토리는 개인 정보를 유출할 수 있습니다. 다음은 흔히 발생하는 정보 유출 키워드이며, 추가로 댓글로 보충해 주세요.

민감한 키워드

중문 키워드 영문 키워드
비밀번호 password
계정 account
신분증 id
은행카드 card
알리페이 alipay
위챗 wechat
휴대폰 번호 phone
가정 주소 address
직장 company
사회보장카드 card
운전면허증 driver
여권 passport
신용카드 credit
key
설정 파일 ini
인증서 credential
사용자 이름 username

정규식 검색:

(비밀번호|계정|신분증|은행카드|알리페이|위챗|휴대폰 번호|가정 주소|직장|사회보장카드|운전면허증|여권|신용카드|username|password|passwd|account|key\s*:|\.ini|credential|card|bank|alipay|wechat|passport|id\s*:|phone|address|company)

블로그 편집에 VSCode를 사용한다면 정규식 검색으로 전체 사이트를 빠르게 검색해 개인 정보 유출 가능성을 확인할 수 있습니다.

Git 히스토리

Git 히스토리는 정보 유출을 포함할 수 있으며, 간단한 스크립트로 오픈소스 블로그의 과거 커밋 정보를 스캔할 수 있습니다.

자신의 레포지토리인 경우 다음 방법으로 히스토리를 삭제할 수 있습니다. 히스토리 정보를 보존해야 하는 경우 삭제하지 마세요.

명령의 의미를 반드시 확인하고 이해한 후 실행하세요. 히스토리를 삭제하므로 신중하게 작업하고, 작업 전에 중요한 데이터를 백업하세요.

git reset --soft ${first-commit}
git push --force

다른 레포지토리 스캔 방법

https://github.com/trufflesecurity/trufflehog

  • 유출된 인증서를 찾고, 검증하고, 분석합니다
  • 17.2k stars
  • 1.7k forks

img

다른 블로그 배포 방법

  • Github Pro는 비공개 레포지토리를 Pages로 배포할 수 있습니다. Pro는 월 4달러입니다.
  • 비공개 레포지토리로 설정하고 Cloudflare Pages로 배포합니다.
  • 레포지토리를 분리합니다. 하나는 작성 중인 글을 저장하는 비공개 레포지토리, 다른 하나는 공개 가능한 글을 저장하는 공개 레포지토리입니다.

_giscus_와 같은 GitHub에 의존하는 댓글 시스템을 사용한다면 여전히 공개 레포지토리가 필요합니다.

좋은 습관 vs 좋은 메커니즘

오픈소스 블로그의 개인 정보 유출 문제를 논의할 때, 많은 사람이 민감한 정보를 레포지토리에 업로드하지 않으면 문제가 없다고 생각합니다.

이것은 쓸데없는 소리로, 프로그래머에게 버그를 쓰지 말라고 요구하는 것과 같습니다. 옳지만 쓸모없습니다. 개인 정보를 보호하기 위해 습관에만 의존하는 것은 신뢰할 수 없습니다. 사람의 습관을轻易하게 믿지 마세요. 그는 언제든 잊어버릴 수 있습니다.

글을 쓸 때는 때때로 임시 문장을 사용하게 됩니다. 특히 프로그래머의 기술 블로그의 경우 짧은 스크립트를 즉석에서 작성할 수 있으므로 환경 변수를 사용하는 것을 항상 기억하지 못할 수 있습니다. 따라서 민감한 정보를 남길 가능성이 반드시 존재합니다.

대부분의 사람이 좋은 습관이 무엇인지 이해하고 있다고 생각합니다. 따라서 좋은 습관에 대해서는 논의하지 않고, 메커니즘을 통해 개인 정보 유출을 방지하는 방법을 주로 공유합니다.

먼저 레포지토리를 분리합니다. 초안 레포지토리와 배포 레포지토리를 분리하여 GitHub Pages에 배포되는 모든 글이 검토된 것이며, draft 상태의 글이 유출되지 않도록 합니다.

또한 Github Action을 통해 각 커밋 시 민감한 정보를 스캔하고, 민감한 정보가 있는 경우 커밋을 차단할 수 있습니다. trufflehog를 참조하세요.

이 글에서 공유한 정규식 검색은 간단한 예시일 뿐이며, 어떠한 프로세스에도 통합되지 않았습니다. 자신의 요구에 따라 더 많은 맞춤 작업을 수행하고 프로세스에 통합할 수 있습니다.

참고