はじめに
つい先日、友人に会った際にこのようなことを言われました。
友人👓「君のメールアドレスをハッキング特定したよ😏」
私☕️「...は?」
とても恐ろしいですね...
なぜ彼は私のメアドを知ることができたのでしょうか??
その理由を以下に記述します!
結論
GithubのPUBLICリポジトリのコミットのハッシュからメールアドレスが流出しておりました。
GitHubでPUBLICリポジトリを公開していると、思わぬ形で個人情報が流出する可能性があります。
今回は、コミット履歴からメールアドレスが流出した実際の体験を共有し、対策方法をまとめます。
なぜ見えるのか
- Gitのコミット時に
CommiterとAuthorが記録される - Gitの設定で普段使いのメールアドレスを指定していた場合、リポジトリに残ってしまう
- GitHub上では見えないが、
git cloneしてコマンドを打つと見える - ブラウザからでもPull Requestやコミットのページの末尾に
.patchと付ければ確認できる
リスクの評価
- リスクレベル: 中リスク(緊急対応必要というより、まあまあめんどくさい対応)
- 影響範囲:
- プライベートリポジトリ or GitHub用アドレス使ってたら問題なし
- 普段使いのメールアドレスが流出した場合、スパム業者や私怨のある人がたどりつく可能性
- ただし、メールアドレスだけでできることは限界がある
- スパムの標的になってもGmailの拒否設定などで対策可能
発見のきっかけ
友人から「PUBLICリポジトリのコミット履歴からメールアドレスが見えるよ」と指摘されました。
確認したところ、確かにGitのコミット履歴に個人のメールアドレスが記録されていました!!
対策方法
1. 今後の設定変更
まず、現在Gitで設定しているメールアドレスを確認します。
git config --global user.email
個人アドレスになっている場合は、GitHubが提供している秘匿アドレスに書き換えます。
git config --global user.email "xxx@users.noreply.github.com"
GitHubのnoreplyアドレスの取得方法は以下の記事を参照:
この設定により、今後のコミットはxxx@users.noreply.github.comが適用されます。
2. リポジトリ専用の設定
特定のリポジトリだけで別のメールアドレスを使いたい場合:
git config --local user.email "xxx@users.noreply.github.com"
git config --local user.name "Your Name"
3. 過去のコミットの書き換え
既にPUBLICリポジトリにコミット済みの履歴を改変したい場合、Gitの歴史を改変する必要があります。
⚠️ 注意: 共同開発しているリポジトリであれば、他の人に影響が出ます。チーム開発ではできません。
手順
- リポジトリをローカルにクローン
git clone <repository-url>
cd <repository-name>
- 過去のコミットで自分のメールアドレスが使われているか確認
git log --author="old-email@example.com"
- コミット履歴を書き換え
git filter-branch -f --env-filter \
"GIT_AUTHOR_NAME='Your Name'; \
GIT_AUTHOR_EMAIL='xxx@users.noreply.github.com'; \
GIT_COMMITTER_NAME='Your Name'; \
GIT_COMMITTER_EMAIL='xxx@users.noreply.github.com';" \
HEAD
このコマンドを打つと、警告メッセージが出ますが、そのまま実行されます。
- 書き換えの確認
git log --author="old-email@example.com"
出力されなかったら書き換え成功です。
- フォースプッシュ
git push -f origin main
⚠️ 非常に危険な作業です。最悪復旧できなくなるので、細心の注意を払ってください。
4. より安全な方法:git filter-repo
git filter-branchは非推奨のため、git filter-repoを使う方が安全です。
# git filter-repoのインストール(macOSの場合)
brew install git-filter-repo
# メールアドレスの書き換え
git filter-repo --email-callback '
return email.replace(b"old-email@example.com", b"xxx@users.noreply.github.com")
'
5. フォーク先は諦めるしかない
リポジトリがフォークされていた場合、そちらのリポジトリにはメールアドレスは残ります。
これは避けられません。
学んだこと
1. PUBLICリポジトリのリスクを理解する
- GitHub上で見えなくても、Gitの履歴には情報が残る
.patchファイルからもメールアドレスが確認できる- 秘匿性はまったくない
2. 早めの対策が重要
- PUBLICリポジトリを公開する前に、Gitの設定を確認する
- GitHub用のnoreplyアドレスを使う習慣をつける
- 個人メールアドレスを流出させたくない場合は、最初から対策しておく
3. リスクの評価
- メールアドレスだけでできることは限界がある
- スパムメールや営業メールは稀にとどまり、Gmailのフィルタで対策可能
- ただし、プライバシーを重視する場合は対策しておくべき
4. チーム開発での注意
- 過去のコミット履歴を書き換えると、チーム全体に影響が出る
- チーム開発では、最初から適切な設定を共有する
- 新メンバーには、Gitの設定方法をドキュメント化して共有する
まとめ
PUBLICリポジトリを公開する際は、以下の点に注意しましょう!!!:
- Gitの設定を確認:
git config --global user.emailでメールアドレスを確認 - GitHub用アドレスを使用:
xxx@users.noreply.github.comを使う - 早めの対策: 公開前に設定を確認する
- リスクの理解: メールアドレスが流出しても致命的ではないが、プライバシーを重視する場合は対策すべき
パブリックにコード公開するのであれば、早めに設定入れておきたいですね!! (それかメールアドレス自体を流出してもいいやつを使うか)
参考リンク
コメント
コメントを読み込み中...
