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

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

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

我试过

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

但没有成功。

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

答案1

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

RedirectMatch 404 /\.git

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

答案2

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

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

答案3

如果你使用的是共享主机服务,但无法访问Apache 配置文件,您仍然可以在 .htaccess 文件中执行此操作,如下所示:

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

答案4

### 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

相关内容