我已经开始使用git来部署网站进行testing。 如何防止apache提供.git目录内容?
我试过了
<Directorymatch "^/.*/\.svn/"> Order deny,allow Deny from all </Directorymatch>
没有成功。
我知道我可以在每个.git目录中创build一个.htaccess文件并拒绝访问,但是我希望可以将其放入主configuration文件中,这个文件可以在所有网站上实现这一function。
这不是因为你在规则中有'svn'而不是'git'吗?
<Directorymatch "^/.*/\.git/"> Order deny,allow Deny from all </Directorymatch>
这与许多其他答案具有相同的效果,但更简单:
RedirectMatch 404 /\.git
这可以进入.htaccess
或您的服务器configuration文件。 它隐藏了任何名称以.git
开头的文件或目录(例如.git
目录或.gitignore
文件),因此不仅隐藏了Git仓库的内容,它的存在也被隐藏起来。
如果您不使用.htaccess文件,而是想使用/etc/apache2/httpd.conf(或者您的服务器的主conf文件)来隐藏.git目录和.gitignore文件,则可以使用以下命令。 我发现上面的主configuration设置的答案没有隐藏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>
如果你在一个共享的托pipe服务,并没有访问apache.conf ,你仍然可以在你的.htaccess文件,如下所示:
RewriteEngine On RewriteRule "^(.*/)?\.git/" - [F,L]
要使用.htaccess保护.git目录以及其他文件(如.gitignore和.gitmodules),请使用:
RewriteEngine On RewriteRule ^(.*/)?\.git+ - [F,L] ErrorDocument 403 "Access Forbidden"
### 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
。
从安全angular度来看,我更喜欢在403上伪造一个404,对攻击者来说更多的信息。 两个评论之一,以确保,其他作品也为你。
顺便说一句,好的变化是,你们两个的岩石testing是:
http://localhost/.gitignore http://localhost/.git/HEAD
我总是将以下行添加到虚拟主机模板中
RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
只要确保没有人可以访问VCS特定数据。 完美的作品。
假设您的networking服务器正在使用与您用来访问.git存储库的用户不同的用户,则可以禁用.git目录中其他用户的执行位。
这应该与其他networking服务器一起工作,并不依赖性能消耗的.htaccess文件。
你可能也想拒绝服务.gitignore
。
以点开头的文件在linux中是隐藏的。
因此,只要404以点开始:
RedirectMatch 404 /\.
对于那些希望简单地否定Linux发行版中的所有“隐藏”文件和目录(通常是以“。”开头的所有文件)的用户,下面是在Apache 2.4中放置在服务器conf上下文中的情况:
<FilesMatch "^\.(.*)$"> Require all denied </FilesMatch> <DirectoryMatch "/\.(.*)"> Require all denied </DirectoryMatch>
这里是旧的Apache 2.2风格(相同的正则expression式,只是不同的authentication指令):
<FilesMatch "^\.(.*)$"> Order deny,allow Deny from all </FilesMatch> <DirectoryMatch "/\.(.*)"> Order deny,allow Deny from all </DirectoryMatch>
那么你不必特别担心.git
或.svn
。 这也会匹配.htaccess
和.htpasswd
。
就我个人而言,我喜欢发出403s而不是404s,但是你可以很容易地使用RewriteRule而不是auth拒绝,就像这样:
<FilesMatch "^\.(.*)$"> RewriteRule "^(.*)$" - [R=404,L] </FilesMatch> <DirectoryMatch "/\.(.*)"> RewriteRule "^(.*)$" - [R=404,L] </DirectoryMatch>