LoginSignup
3
1

More than 1 year has passed since last update.

そのオープンソースプロジェクト、公開前に大事な情報コミットしてない?

Last updated at Posted at 2022-01-10

通常、秘密鍵やAPI Tokenはソースコードとは分離させ、.envファイルなどに保存しておいて、Gitのコミットには含めない。しかし、実装の初期には.envを一時的にコミットに含めている事例も珍しくない。それを後で削除してコミットしても、履歴としては残っている。

この記事では、スマートコントラクト用の秘密鍵や、APIトークンなどの情報をGitのコミット履歴から検索し、リポジトリを公開する前に安全を確認できるツールを紹介する。

コミット履歴を展開する

私の作ったesightというツールを使う。

git logを使って確認するのが一般的だが、一度全て展開した方が、後の編集や確認が楽になる。

インストール

pip3 install git+https://github.com/TakutoYoshikai/elemental-sight.git

コミット履歴の展開

出力先ディレクトリに、全てのコミットの差分ファイルが展開される。そこからターゲットとなる文字列を検索し、それを修正すればよい。

esight /path/to/repo {BRANCH} -o {OUTPUT DIR}

展開されたディレクトリはこうなっている
スクリーンショット 2022-01-10 13.15.37.png

コミットが順番に番号のディレクトリに出力されて、差分のファイルが保存されている。

APIトークンや秘密鍵などの文字列を検索するツール

このesightを使用して、gitのコミット履歴を展開した後、正規表現でランダムな文字列を検索するツールshibaを開発した。

このshibaは、正規表現によってhex文字列や、普通の文字列を検索した後に、その文字列がランダムに生成されたかどうか、文字の出現頻度の分散を計算し、閾値以上のものを表示する。

インストール

git clone https://github.com/TakutoYoshikai/shiba
cd shiba
./install.sh

#パスを通す
echo "export PATH=\$PATH:/path/to/shiba/bin" >> ~/.bash_profile

使い方

# APIトークンを探す
shiba /path/to/repo {BRANCH} {TOKEN LENGTH}
# ./SHIBA_RESULT にコミット履歴が展開されている

# hex文字列を探す
shiba /path/to/repo {BRANCH} hex {TOKEN LENGTH}

#例: ローカルにcloneしたreactのリポジトリの中から32文字のhex文字列を検索する
shiba ./react master hex 32

結果は以下のように表示される

./0/message.json 4hQ0v2z7fNRvvOji0jShV5SpNqYEgajJ
./1/message.json zkjhJgeY336mqEADvkvE494xxi2XyB8u
./2/env oe7tGfeBW1YJga7DieAjtrxCgNhs1c5X

コミット履歴を確認した後

公開してはいけないデータを見つけた場合の対処法が、以下のメルカリの記事に修正の方法がまとめられている。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1