私のWebアプリケーションの1つで、過去数週間、誤って.gitディレクトリをWebサーバーで読み取り可能のままにしてしまいました。インデックスリストが無効になりました。 website.com/.git URLにアクセスすると、他の404エラーと区別できない404エラーが発生しますが、たとえば、website.com/.git/configにアクセスするとファイルがダウンロードされます。
私のアプリケーションにはどのようなリスクがありますか?誰かがアプリケーションのソースコード全体をダウンロードするのに十分な情報が公開されている可能性はありますか?
はい、リポジトリのコンテンツ全体(履歴を含む)をダウンロードすることは可能です–単純なgit clone
でダウンロードできます。ただし、これは誰かがその.git
ディレクトリの存在について知っているであることを前提としています...誰もそれに気づいていない可能性が高いです。 Webサーバーのログをいつでも確認できます。
ドキュメントルートの単純なgit clone
は完全に正確ではありません。サーバーでgit update-server-info
が実行されない限り、HTTPを介した.gitの偶発的な公開など、公開されたGITリポジトリのクローンを作成することは " dumb "サーバーでは不可能です。一部のメタデータは利用可能ですが、.git/objects
ディレクトリのコンテンツ(別名、ジューシーなもの)を取得できるとは限りません。 packed ではない objects を回復することは可能です。本番サーバー上の作業コピー/リポジトリには当てはまらないはずです。
これは、リモートにプッシュされないコミットされた変更を伴う開発マシンにとっては別の話です。この場合、git gc
を呼び出さない限り、ガベージコレクターは通常呼び出されません。したがって、ファイルはまだpackfilesの一部ではありません。最後のプッシュ以降にコミットされたファイルをHTTP経由で回復できます。
pdate-server-info 基本的に、参照(.git/info/refs)とパックファイル(.git/objects/info/packs)のマップを作成します。 .git/ packed-refs を使用して最初の置換を行うことができますが、ディレクトリインデックスを有効にするか、実際にブルートフォースSHA-1を使用しないと、パックファイルを取得できません(これは悪い考えです。開始)。