如何防止apache服务.git目录?


74

我已经开始使用git部署网站进行测试。如何防止apache提供.git目录内容?

我试过了

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

没有成功。

我知道我可以在每个.git目录中创建一个.htaccess文件并拒绝访问,但是我希望可以将一些内容放入主配置文件中,以使其在所有网站上都具有全局性。


3
阻止apache服务目录后,如果目录上启用了索引,则可能还需要使用“ IndexIgnore .git”隐藏.git目录。
瑞安

Answers:


55

它不起作用,因为规则中包含“ svn”而不是“ git”。您要做的就是用“ git”替换“ svn”。

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

1
当我创建一个仅包含您的代码的.htaccess时,出现错误:“ <DirectoryMatch not这里不允许”
Shoan 2010年

2
它必须在Apache conf中。请参阅:httpd.apache.org/docs/1.3/mod/core.html#directorymatch
sinping

2
最简单的正则表达式是<DirectoryMatch /\.git/>
Bachsau


1,感谢单曲/ OP。请注意,在Apache 2.4中,“订单,拒绝”和下一行已由“要求全部拒绝”代替。另外,在上面的许多安装中,名为“ Apache conf”的文件都被命名为“ httpd.conf” --- singping的用法只是一个随意的语句,所以不要搜索该文字名称(可能不用说,但您永远不会知道人们如何看待它)。
Kevin_Kinsey

139

这与许多其他答案具有相同的效果,但更为简单:

RedirectMatch 404 /\.git

这可以进入.htaccess您的服务器配置文件。它通过返回404来隐藏名称以开头的任何文件或目录.git(例如,.git目录或.gitignore文件)。因此,不仅Git存储库的内容被隐藏,它的存在也被隐藏了。


2
我真的很喜欢这个解决方案。简单而优雅。
Shoan 2014年

2
将其放在htdocs根目录中也可以进行全局工作。
jor

4
最好也喜欢此选项。在我看来,为/.git或/.gitignore之类的请求返回404更为安全,这样就无法从外部确定git是否正在被使用的事实。
Ezra Free

2
请注意,如果启用了目录列表,则这些.git文件夹仍将可见,但是当您尝试访问它们时会得到404。
Andy Madge

1
@BennettMcElwee是的,几乎没有充分的理由在生产服务器上全局启用目录列表。只是以为它应该引起人们的注意。
Andy Madge

13

如果您不使用.htaccess文件,而是想使用/etc/apache2/httpd.conf(或服务器的主conf文件)来隐藏.git目录和.gitignore文件,则可以使用以下命令。我发现上面关于主配置设置的答案没有隐藏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/config在Apache httpd 2.4.27中阻止该文件。
ilhan

12

如果您使用共享托管服务,但无权访问apache.conf,则仍然可以在.htaccess文件中进行操作,如下所示:

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

感谢这在共享主机情况下为我工作,而最佳答案没有解决
柏拉图2014年

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

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

此方法适用于.htaccess,无需http.conf访问。将此作为第一个重写规则。Rewrite On如果需要,添加前缀。

从安全角度来看,我更喜欢伪造的404而不是403,这对于攻击者而言更有用。注释掉其中两个之一,以确保另一个也对您有用。

顺便说一句,好的变化是,您对这两个的石蕊测试是:

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

为什么都有这两个规则?较简单的RedirectMatch本身就足够了。(此外,正则表达式似乎不太正确-为什么最后加号?)
Bennett McElwee

个人偏执狂/安全性提高了一倍。如果RewriteEngine碰巧被关闭了(中央配置更改,团队沟通不畅,服务器“更新”很不幸,...您将其命名为:-) +已过时,或者应该是$,这很不错!(没有时间进行测试,对不起。)
Frank Nocke

如果您担心RewriteEngine可能关闭,则将其放在RewriteEngine OnRewriteRule之前。但是无论如何它都是重言式的和多余的,因为更简单的RedirectMatch本身就足够了。尽管甚至可以简化。基本上,我推荐我的答案。:)
Bennett McElwee

石蕊测试+1。

5

要使用.htaccess保护.git目录以及其他文件,例如.gitignore和.gitmodules,请使用:

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

4
对我有用,但是尾随的ErrorDocument没有影响。从安全的角度来看,我想将伪造的404信息提供给攻击者,而不是信息丰富的403 ...
Frank Nocke

1
这是一个坏主意,因为它会向黑客泄露信息。403表示它在那里,而404表示它不在。服务器设置中的每个事实对黑客都是有用的。我会考虑修改此。
GerardJP 2014年

3

我总是将以下行添加到vhost模板中

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

只是要确保没有人可以访问VCS特定的数据。完美的作品。


1

假设您的Web服务器使用的用户与用于访问.git存储库的用户不同,则可以对.git目录中的其他用户禁用执行位。

这应该与其他Web服务器一起使用,并且不依赖于消耗大量性能的.htaccess文件。


1

对于那些只想拒绝Linux发行版中所有“隐藏”文件和目录(通常所有文件以“。”开头)的人来说,以下是将Apache 2.4放置在服务器conf上下文中的方法:

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

这是旧的Apache 2.2样式(相同的regex,只是不同的auth指令):

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

然后,您不必担心.git.svn专门担心。那也将匹配类似的.htaccess.htpasswd固有的东西。

就个人而言,我喜欢为此类请求发出403,而不是404,但是您可以轻松地使用RewriteRule而不是auth denial,如下所示:

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


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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.