拒绝访问Apache上的.svn文件夹

我们在subversion中有一个rails应用程序,我们使用Capistrano进行部署,但注意到我们可以访问'/.svn'中的文件,这提供了一个安全问题。

我想知道什么是最好的方法来做到这一点。 一些想法:

  • 全局Apacheconfiguration拒绝访问
  • 在公用文件夹和所有子文件夹中添加.htaccess文件
  • Cap任务更改权限

我真的不喜欢删除文件夹或使用svn导出的想法,因为我想保留'svn info'。

最好的select是使用Apacheconfiguration。

使用htaccess或全局configuration主要取决于如果你控制你的服务器。

如果你这样做,你可以使用类似的东西

 <DirectoryMatch。* \。svn /.*>
    拒绝所有
 </ DirectoryMatch>

如果你不这样做,你可以使用FilesMatch在.htaccess文件中做类似的事情

另一种保护.svn文件的方法是在Apacheconfiguration中使用redirect:

 RedirectMatch 404 /\\.svn(/|$) 

因此,不要获得403禁止(并提供线索将是攻击者),你会得到一个404,这是我们所期望的随机inputpath。

我不喜欢404每个文件startig一个点的想法。 我会使用更多的select性的方法,无论是我在项目中使用的CVS(例如svn)

 RedirectMatch 404 /\\.svn(/|$) 

或者抓住所有的CVS系统

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

– 过时的答案如下(见评论) –

我不能写评论所以… csexton的答案是不正确的,因为用户不能访问.svn文件夹,但可以访问它里面的任何文件! 例如你可以访问http://myserver.com/.svn/entries

正确的规则是

 RedirectMatch 404 /\\.svn(/.*|$) 

我认为Riccardo Galli说得对。 即使apache已经有.svn设置为禁止我,但.svn /条目肯定是可用的…暴露我的svn服务器,端口号,用户名等

我实际上是在想,为什么不把git作为一种预防措施(比如说你现在还不使用git,但可能有一天你不会考虑目录限制)。

然后我想,为什么不限制一切应该隐藏的东西呢? 任何人都可以想像这个问题?

 RedirectMatch 404 /\\..*(/.*|$) 

我在初始阶段之后添加了'。*' – 与Riccardo只有区别。 好像是.svn,.git,.blah等等

我宁愿拒绝访问所有的点文件(例如:.htaccess,.svn,.xxx等),因为他们通常不需要networking访问。

这是达到这个目的的规则(包括Apache 2.2):

 <LocationMatch "\/\..*"> Order allow,deny Deny from all </LocationMatch> 

(更新)或者你可以使用下面的(在Apache 2.2和2.4中工作):

 # Deny access to dot-files, as 404 error # (not giving hint about potential existence to the file) RedirectMatch 404 ".*\/\..*" 

这个:

 RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* / 

也可以使用,如果你不想发送错误回到用户。

它只是redirect到网站的根页面。 此外,这是一个永久的redirect,所以机器人不会尝试重新索引这个URL。

一个RedirectMatch会回应一个404,这很棒。

但是,如果启用了“选项+索引”,则用户仍然能够从父目录中查看“.svn”目录。

用户将无法进入目录 – 这是'404 Not Found'的来源,但是他们将能够看到该目录并提供线索来作为攻击者。

我看来,Apache conf应该是:

 <Directory ~ "\.svn"> Order allow,deny Deny from all </Directory> 

我不是那么喜欢RedirectMatch,所以我用了一个RewriteRule:

 RewriteRule /\..*(/.*|$) - [R=404,L] 

连字符的意思是“不做任何replace”。 我也不明白为什么,在上面的例子中,正则expression式有两个反斜杠:

 /\\..*(/.*|$) 

所以我拿出一个,它工作正常。 我无法弄清楚为什么你会在那里使用两个。 有人在乎我吗?

Apache Subversion常见问题正在解决这个解决scheme:

 # Disallow browsing of Subversion working copy administrative dirs. <DirectoryMatch "^/.*/\.svn/"> Order deny,allow Deny from all </DirectoryMatch> 

来源: https : //subversion.apache.org/faq.html#website-auto-update

在您的Subversion服务器安装中创build一个访问权限文件。

例如,如果你的文件夹结构是

/ SVN

/svn/rights/svnauth.conf

创build一个configuration文件并在你的apache subversionconfiguration文件中input你通常在/etc/httpd/conf.d/subversion.conf中find的那个文件的path

在你的svnauth.conf文件中定义权限为:

Foo.com的访问权限

[foo.com:/trunk/source]

DEV1 = RW

dev2 = rw …..

通过这种方式,您可以从一个单独的文件中控制访问权限,并且可以在更精细的层面上进行访

欲了解更多信息通过svn红色书阅读。