Apacheが.gitディレクトリを提供しないようにするにはどうすればよいですか?


74

テスト用のWebサイトの展開にgitを使用し始めました。Apacheが.gitディレクトリのコンテンツを提供しないようにするにはどうすればよいですか?

私は試した

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

成功なし。

各.gitディレクトリに.htaccessファイルを作成してアクセスを拒否できることは知っていますが、メインの構成ファイルに入れて、これをすべてのWebサイトでグローバルにすることができるものが欲しかったのです。


3
apacheがディレクトリを提供しないようにすると、ディレクトリでインデックスが有効になっている場合、「IndexIgnore .git」で.gitディレクトリを非表示にする必要がある場合があります。
ライアン

回答:


55

ルールに「git」ではなく「svn」があるため、機能していません。あなたがしなければならないのは、「svn」を「git」に置き換えることです。

<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>

1
私はあなたのコードを含む.htaccessファイルを作成すると、私はエラーを取得する:「<DirectoryMatchここでは許されない」
Shoan

2
Apache confにある必要があります。参照:httpd.apache.org/docs/1.3/mod/core.html#directorymatchを
sinping

2
最も単純な正規表現は<DirectoryMatch /\.git/>
バクサウ

完璧なソリューションのためにこれを確認magento.stackexchange.com/questions/202840/...
Pratik Kamani

1つ目は、singing / OPのおかげです。Apache 2.4では、「Order、deny」と次の行が「Require all denied」に置き換えられていることに注意してください。また、上記の「Apache conf」と呼ばれるファイルの多くのインストールでは「httpd.conf」という名前が付けられています。人々がそれを読むかもしれない)。
-Kevin_Kinsey

139

これは他の多くの回答と同じ効果がありますが、はるかに簡単です:

RedirectMatch 404 /\.git

これは.htaccess、サーバー構成ファイルに移動できます。404を返すことで、名前で始まるファイルまたはディレクトリ.git.gitディレクトリまたは.gitignoreファイルなど)を隠します。したがって、Gitリポジトリの内容が隠されるだけでなく、その存在も隠されます。


2
私はこのソリューションが本当に好きです。シンプルでエレガントです。
Shoan 14年

2
これをルートhtdocsディレクトリに配置することもグローバルな仕事です。
ジョル

4
このオプションも大好きです。/.gitや/.gitignoreなどのリクエストに対して404を返す方が安全だと思われるので、gitが使用されているという事実を外部から判断することはできません。
エズラ無料

2
ディレクトリリストを有効にしている場合、.gitフォルダは表示されたままですが、アクセスしようとすると404が表示されることに注意してください。
アンディマッジ

1
@BennettMcElweeうん、同意しました。実稼働サーバーでグローバルにディレクトリ一覧を有効にする正当な理由はほとんどありません。誰かを捕まえた場合に言及するに値すると思った。
アンディマッジ

13

.htaccessファイルを使用せず、代わりに/etc/apache2/httpd.conf(またはサーバーのマスターconfファイル)を使用して.gitディレクトリと.gitignoreファイルの両方を非表示にする場合は、次を使用できます。上記のmaster conf設定の答えはgitignoreファイルを隠していません。

# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
  Order deny,allow
  Deny from all
</Directorymatch>
<Files ~ "^\.git">
    Order allow,deny
    Deny from all 
</Files>

1
www.example.com/.git/configApache httpd 2.4.27でファイルをブロックしないでください。
ilhan

12

共有ホスティングサービスを使用していて、apache.confにアクセスできない場合でも、次のように.htaccessファイルでアクセスできます。

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]

おかげで、これはトップの答えはなかった、共有ホスティングの状況で私のために働いた
プラトン

6
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

これはで機能し.htaccesshttp.confアクセスは不要です。これを最初の書き換えルールとして含めます。Rewrite On必要に応じて追加します。

セキュリティの観点からは、403よりも偽の404の方が攻撃者にとって有益です。確認するために、2つのうち1つをコメントアウトしてください。

ちなみに、良い変更点は次のとおりです。2つのlithmusテストは次のとおりです。

http://localhost/.gitignore
http://localhost/.git/HEAD

なぜ両方のルールがあるのですか?より単純なRedirectMatchで十分です。(また、正規表現はまったく正しくないようです-なぜ最後にプラスですか?)
ベネット・マッケルウィー

個人的なパラノイア/セキュリティの倍増。RewriteEngineがオフになった場合(中央設定の変更、チームコミュニケーションの不備、不運なサーバーの「更新」など)。(テストの時間はありません。申し訳ありません。)
フランクノッケ

RewriteEngineがオフになることが心配な場合は、RewriteRuleのRewriteEngine On前に置いてください。しかし、とにかく単純なRedirectMatchで十分なので、トートロジー的で冗長です。それでも簡単にできますが。基本的には代わりに答えをお勧めします。:)
ベネットマケルウィー

リトマス試験の場合は+1。

5

.htaccessを使用して、.gitディレクトリと.gitignoreや.gitmodulesなどの他のファイルの両方を保護するには、次を使用します。

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"

4
私のために動作しますが、末尾のErrorDocumentは影響しません。セキュリティの角度から、私は...攻撃者に有益な403以上の派手な偽の404をいただきたい
フランクNocke

1
これは、ハッカーに情報を開示するため、悪い考えです。403は存在することを意味し、404は存在しないことを意味します。サーバーの設定に関するすべての事実は、ハッカーにとって有用です。これを修正することを検討します。
GerardJP 14

3

次の行を常にvhostテンプレートに追加します

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

誰もVCS固有のデータにアクセスできないことを確認してください。完璧に動作します。


1

Webサーバーが.gitリポジトリへのアクセスに使用するユーザーとは異なるユーザーを使用していると仮定すると、.gitディレクトリの他のユーザーの実行ビットを無効にできます。

これは他のWebサーバーで動作するはずで、パフォーマンスを消費する.htaccessファイルに依存しません。


1

Linuxディストリビューションのすべての「隠された」ファイルとディレクトリ(一般に「。」で始まるすべてのファイル)を単に拒否したい人のために、サーバーconfコンテキストに配置されたときにApache 2.4で機能するものを次に示します。

<FilesMatch "^\.(.*)$">
    Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Require all denied
</DirectoryMatch>

そして、ここに古いApache 2.2スタイルがあります(同じ正規表現、異なるauthディレクティブ):

<FilesMatch "^\.(.*)$">
    Order deny,allow
    Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Order deny,allow
    Deny from all
</DirectoryMatch>

そうすれば.git.svn特に心配する必要はありません。それはまた.htaccess.htpasswd本質的にのようなものと一致します。

個人的には、このようなリクエストに対して404ではなく403を発行するのが好きですが、次のように、認証拒否の代わりにRewriteRuleを簡単に使用できます。

<FilesMatch "^\.(.*)$">
    RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>

0

あなたもおそらくサービスを拒否したいでしょう.gitignore

Linuxでは、ドットで始まるファイルは隠されています。

したがって、ドットで始まるものはすべて404です。

RedirectMatch 404 /\.


0

これは少し遅れますが、私の答えは少し異なるので、追加するつもりでした。これは、httpd.confファイルに含める必要があります。<Files "*">内部にネスト<Directory>ディレクトリ内のすべてのファイルをブロックしますタグ。

# GitHub Directory
<Directory /var/www/html/yoursite/.git>
   Order Deny,Allow
   Deny from all
   <Files "*">
     Order Deny,Allow
     Deny from all
   </Files>
</Directory>
# GitHub files
<Files .gitignore>
  order Deny,Allow
  Deny from all
</Files>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.