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

Sho*_*oan 95 git apache-2.2

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

我试过

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>
Run Code Online (Sandbox Code Playgroud)

没有成功。

我知道我可以在每个 .git 目录中创建一个 .htaccess 文件并拒绝访问,但我想要一些我可以放入主配置文件的东西,使其在所有网站上都是全局的。

Ben*_*wee 168

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

RedirectMatch 404 /\.git
Run Code Online (Sandbox Code Playgroud)

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

  • 也最喜欢这个选项。在我看来,为 /.git 或 /.gitignore 之类的请求返回 404 更安全,因此无法从外部确定甚至正在使用 git 的事实。 (4认同)
  • 我真的很喜欢这个解决方案。它简单而优雅。 (3认同)
  • 将它放在根 htdocs 目录中也可以完成全局工作。 (2认同)
  • 请注意,如果您启用了目录列表,`.git` 文件夹仍将可见,但是当您尝试访问它们时,您将收到 404。 (2认同)
  • @shashwat 您无法访问 .git 目录或其中的任何内容,包括 .git/config。所有此类尝试都会出现 404 错误。 (2认同)
  • @LaryxDecidua 这个解决方案无论如何都能做到这一点。无需省略前导斜杠。如果您省略它,那么它还会阻止名称类似于“smoke.gitanes”的文件,这可能不是您想要的。 (2认同)

sin*_*ing 71

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

<Directorymatch "^/.*/\.git/">
  Order 'deny,allow'
  Deny from all
</Directorymatch>
Run Code Online (Sandbox Code Playgroud)

  • 最简单的正则表达式是`&lt;DirectoryMatch /\.git/&gt;` (4认同)
  • 当我创建仅包含您的代码的 .htaccess 时,出现错误:“&lt;DirectoryMatch not allowed here” (2认同)
  • 它必须在 Apache conf 中。请参阅:http://httpd.apache.org/docs/1.3/mod/core.html#directorymatch (2认同)

dan*_*ton 15

如果您使用的是共享托管服务并且无权访问apache.conf,您仍然可以在 .htaccess 文件中执行此操作,如下所示:

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]
Run Code Online (Sandbox Code Playgroud)


小智 15

如果您不使用 .htaccess 文件,而是想使用 /etc/apache2/httpd.conf (或任何您服务器的主 conf 文件)来隐藏 .git 目录和 .gitignore 文件,您可以使用以下内容。我发现上面的 master conf setting 答案没有隐藏 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>
Run Code Online (Sandbox Code Playgroud)

  • 不要阻止 Apache httpd 2.4.27 中的 `www.example.com/.git/config` 文件。 (2认同)

Fra*_*cke 8

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

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

这适用于.htaccess,无需http.conf访问。将此作为重写规则的第一个。Rewrite On如果需要,请预先准备。

从安全角度来看,我更喜欢伪造的 404 而不是 403,这对攻击者来说提供了更多信息。将两者中的一个注释掉,以确保另一个也适用于您。

顺便说一句,好的变化是,您对两者的测试是:

http://localhost/.gitignore
http://localhost/.git/HEAD
Run Code Online (Sandbox Code Playgroud)


scr*_*ibu 5

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

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

  • 对我有用,但是尾随的 ErrorDocument 没有影响。从安全角度来看,我希望攻击者使用虚假的 404 而非信息丰富的 403 ...... (4认同)
  • 这是一个坏主意,因为它向黑客泄露了信息。403 表示存在,404 表示不存在。服务器设置的每个事实对黑客来说都是有用的。我会考虑修改这个。 (2认同)