拒绝访问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红色书阅读。