この記事で分かること
- .git フォルダや .env ファイルが公開されると、何が起きるか
- 自分のサイトで、公開されていないかを確認する方法
- Apache、nginxで、外から見えないようにする設定
- すでに公開されていた場合に、最初に行うこと
要点は三つです。公開されたファイルは、見られたものとして扱うこと。遮断の設定より先に、中に書かれていた鍵やパスワードを差し替えること。そして、設定だけでなく、公開する場所に置かない運用にすることです。
.gitと.envが公開されると何が起きるか
.git フォルダは、Gitがバージョン管理の履歴を保存する場所です。Webサーバーの公開フォルダの中に残っていると、外部の人がそこから履歴を取り出し、ソースコードの全体を復元できてしまうことがあります。過去に削除した設定ファイルや、コミットしてしまったパスワードも、履歴の中に残っています。
.env は、LaravelなどのフレームワークやNode.jsのアプリで、データベースのパスワード、APIキー、アプリの暗号鍵などを書いておくファイルです。外から読めると、そこに書かれた情報がそのまま流出します。
| 公開されたもの | 起きうること |
|---|---|
| .git フォルダ | ソースコードの流出、履歴に残った鍵やパスワードの流出、内部の構造の把握 |
| .env | データベースやAPIの認証情報の流出、それを使った不正アクセスや課金 |
| バックアップ(.sql、.zip、.bak) | データベースの全件や設定ファイルの流出 |
自分のサイトで確認する方法
ブラウザで、次のようなURLを開いてみます。ご自身が管理しているサイトに限って行ってください。
https://example.com/.git/HEADhttps://example.com/.git/confighttps://example.com/.env
.git/HEAD を開いて ref: refs/heads/main のような1行が表示されたら、公開されています。.env に APP_KEY= や DB_PASSWORD= のような行が表示された場合も同様です。「403 Forbidden」や「404 Not Found」であれば、少なくともその場所からは取得できません。
コマンドでは、次のように状態コードを確認できます。
curl -s -o /dev/null -w "%{http_code}n" https://example.com/.git/HEAD
curl -s -o /dev/null -w "%{http_code}n" https://example.com/.env
注意したいのは、「200」が返っても、中身が本物とは限らないことです。存在しないURLにも、トップページなどの同じ内容を「200」で返すサイトがあります。中身を見て判断してください。
外から見えないようにする設定
Apache(.htaccess または設定ファイル)
<FilesMatch "^.(?!well-known)">
Require all denied
</FilesMatch>
RedirectMatch 404 /.git
1つ目は、ドットで始まるファイルを拒否します(.well-known は除きます)。2つ目は、.git を含むURLに404を返します。
nginx
location ~ /.(?!well-known) {
deny all;
return 404;
}
設定を変えたら、nginx -t で構文を確かめてから、reloadします。
根本の対策: 公開する場所に置かない
遮断の設定は、書き間違いや、サーバーの移行で消えてしまうことがあります。根本の対策は、そもそも公開フォルダの中に置かないことです。
- Laravelなら、公開するのは
publicフォルダだけにし、.envはその外に置かれる構成にします。 - Gitのリポジトリを、公開フォルダの直下で
git cloneして運用しません。ビルドした成果物だけを配置します。 - バックアップやSQLのダンプは、公開フォルダに残さず、公開フォルダの外に保存します。
すでに公開されていた場合の対処
見つかったら、遮断の設定より先に、次の順で進めます。
- 書かれていた鍵やパスワードを差し替える: データベースのパスワード、APIキー、メールやストレージの認証情報、アプリの鍵(Laravelの
APP_KEYなど)です。Gitの履歴に残っていたものも含めます。公開されていた期間が分からない場合は、全て流出したものとして扱います。 - 外から見えないようにする: 上の設定を入れ、実際にURLを開いて「404」または「403」になることを確認します。
- アクセスの記録を確認する: サーバーのアクセスログで、該当のURL(
.git、.env)へのアクセスが、いつから、どこから行われたかを確認します。見知らぬアクセスがあれば、不正利用の有無も調べます。 - 被害の有無を確かめる: データベースの不審な操作、不明な管理者アカウント、身に覚えのない請求などを確認します。
- 再発を防ぐ: 配置の手順を見直し、公開フォルダに置かない構成にします。
定期的に確認する
一度直しても、サーバーの入れ替えや、デプロイ方法の変更で、再び公開されることがあります。公開前や更新後に、今回のようなURLを確認する習慣をつけてください。Webサイト セキュリティチェッカー「Security Checker X」は、URLを入力するだけで、.git、.env、バックアップファイルなど、公開されていてはいけない主なファイルを確認できます。登録は不要です。
よくある質問
.gitが見えているだけで、本当に危険ですか?
危険です。公開された .git フォルダからは、ソースコードの全体と、過去の履歴が取り出せる場合があります。履歴の中には、すでに削除した設定ファイルや、うっかりコミットしたパスワードが残っていることがあります。
遮断の設定を入れれば、それで安心ですか?
遮断は、これ以上の流出を防ぐための処置です。すでに取得された可能性がある情報は、元に戻せません。書かれていた鍵やパスワードの差し替えを、先に行ってください。
自分のサイトでなければ、確認してもよいですか?
他人のサイトのURLに対する確認は、管理者の許可がない限り、避けてください。確認は、ご自身で管理しているサイトに限って行います。
WordPressでも、.gitや.envの確認は必要ですか?
必要です。WordPress本体にはありませんが、テーマやプラグインを開発している場合や、サーバー上で Git を使って運用している場合は、.git が残ることがあります。wp-config.php のバックアップ(wp-config.php.bak など)も、同様に確認してください。
関連記事
- Webサイトのセキュリティチェック項目30選|確認方法つき一覧表
- WordPressの脆弱性を確認する方法|本体・プラグインの更新と対処の手順
- 簡易チェックと脆弱性診断の違い|無料ツールでできることと、専門業者が必要な場面
関連する用語
サイトの設定を無料で確認する
この記事の内容を、自分のサイトで確かめたい時は、Webサイト セキュリティチェッカー「Security Checker X」をお使いください。URLを入力するだけで、登録なしで診断できます。










コメント