使.git目录web无法访问

Chr*_*nch 121 git .htaccess apache2

我有一个网站,我使用github(封闭源)来跟踪更改和更新网站.唯一的问题是,看起来.git目录可以通过网络访问.我怎么能阻止它仍然可以使用git?

我应该使用.htaccess吗?我应该更改.git的权限吗?

Ben*_*wee 359

将它放在Web服务器根目录下的.htaccess文件中:

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

这个解决方案非常强大安全:它

  • 适用.git于您网站中的所有目录,即使有多个目录,
  • 还隐藏了像.gitignore和的其他Git文件.gitmodules
  • 甚至适用于新添加的.git目录,以及
  • 甚至没有放弃目录存在的事实.

  • @BennettMcElwee - 在仔细研究文档并运行一些测试后,看起来毕竟不需要通配符.谢谢你的解决方案.效果很好! (2认同)
  • 我什至建议在表达式的末尾添加“.*”,这样就不能访问 .git/ 下的文件/文件夹 --> `RedirectMatch 404 /\.git.*` (2认同)

Thi*_*ter 33

.htaccess.git文件夹中创建一个文件,并将以下内容放在此文件中:

Order allow,deny
Deny from all
Run Code Online (Sandbox Code Playgroud)

  • 没错,但我建议不要把它放在`.git /`目录本身,因为如果你重新克隆了存储库,它就会丢失. (37认同)
  • 为什么这是接受的答案而不是贝内特的答案?他是解决这个问题的简单而有效的技巧. (3认同)

Jak*_*ton 31

无论.htaccess和权限的.git/文件夹会工作.我推荐前者:

<Directory .git>
    order allow,deny
    deny from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 这个答案非常不正确 - 在.htaccess文件中根本不允许使用目录.它不依赖于服务器设置. (3认同)
  • 有各种匹配方式(例如,[`<Files>`](http://httpd.apache.org/docs/current/mod/core.html#files),[`<FilesMatch>`]( http://httpd.apache.org/docs/current/mod/core.html#filesmatch)). (2认同)
  • NI8VDY =在我试过的1次中失败:在Dreamhost共享主机上,我把它放在网站的根目录.htaccess然后http:到网站root给服务器日志错误引用(.. <目录不允许这里).2个评论者已经警告过这个问题&last last quote(目录根本不允许在.htaccess文件中)并查看官方目录文档http://httpd.apache.org/docs/current/mod/core.html#directory说引用(上下文:服务器配置,虚拟主机)所以不是.htaccess.但这有26票,所以那些找到如何解决.htaccess,PLS UPDATE THE SOLUTION解释. (2认同)

Dav*_*les 6

我不想在.git目录中捣乱并且无法让Bennett的解决方案在Apache 2.2上运行,但是在我的<VirtualHost>配置中添加了以下工作:

RewriteRule ^.*\.git.* - [R=404]
Run Code Online (Sandbox Code Playgroud)


hai*_*ong 6

一个更健壮和简单的选项是禁用目录的 READ 和 Execution 权限.git

由于Apache(httpd)大多运行在一个特殊的用户帐户下,例如它apache在CentOS上以用户身份运行,而.git目录必须在真实用户帐户下创建,因此我们可以通过更改权限来简单地阻止访问。此外,这种方法不会引入任何新文件,也不会影响 git 命令。

命令可以是:

chmod -R o-rx .git
Run Code Online (Sandbox Code Playgroud)

  • 明显的缺点是,如果你重新克隆,你将不得不记住再次运行 `chmod`。 (2认同)

小智 5

mod_rewrite 会给你想要的效果:

RewriteEngine on
RewriteRule .*\.git/.* - [F]
Run Code Online (Sandbox Code Playgroud)

  • 这是一个信息泄露漏洞:它使人们很容易确定`.git`目录的存在,因为它返回一个Forbidden代码而不是Not Found。 (10认同)
  • 使用git并不是一个漏洞 (3认同)

Chr*_*s B 5

我不习惯单独控制对.git文件夹的访问,并选择通过apache配置而不是.htaccess来执行,以防止我覆盖它们,或忘记新安装等.

以下是一些希望有所帮助的详细说明.我正在使用Ubuntu 16.10.

  1. 首先检查在浏览器中导航到.git文件夹时会发生什么.在我的例子中,我看到了一个目录列表.如果你看到你不应该看到的东西(即你没有得到404),请执行以下操作.
  2. 使用apache2ctl -V获取HTTPD_ROOT和SERVER_CONFIG_FILE
  3. 使用它来编辑你的apache配置,在我的例子中是$ sudo nano /etc/apache2/apache2.conf
  4. 在配置文件中的某处添加以下内容:RedirectMatch 404 /.git
  5. 重启apache:$ sudo service apache2 restart
  6. 如果再次导航到该文件夹​​,现在应该为您提供404
  7. 我用.gitignore尝试了这个,并得到了404