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

cse*_*ton 56 svn apache deployment capistrano

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

我想知道最好的方法是什么.一些想法:

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

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

Vin*_*vic 62

最好的选择是使用Apache配置.

使用htaccess或全局配置主要取决于您是否控制服务器.

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

<DirectoryMatch .*\.svn/.*>
    Deny From All
</DirectoryMatch>

如果不这样做,您可以使用FilesMatch在.htaccess文件中执行类似的操作

  • 我使用这种方法结合Riccardo Galli的多个cvs系统列表效果很好:`<DirectoryMatch.*\.(svn | git | hg | bzr | cvs)/.*>拒绝所有</ DirectoryMatch>`这匹配所有子目录/文件也.它仅显示顶级目录是否存在(否则它将返回404),但.svn/doesnotexist返回403. (16认同)

cse*_*ton 43

另一种保护.svn文件的方法是在Apache配置中使用重定向:

RedirectMatch 404 /\\.svn(/|$)
Run Code Online (Sandbox Code Playgroud)

因此,不是获得403禁止(并提供攻击者的线索),而是获得404,这是我们在随机输入路径时所期望的.

  • 为什么这不符合HTTP标准?顺便说一句,它对我很有用,谢谢! (4认同)

Ric*_*lli 30

我不喜欢以点为单位404每个文件startig的想法.我使用更具选择性的方法,或者使用我在项目中使用的cvs(示例中的svn)

RedirectMatch 404 /\\.svn(/|$)
Run Code Online (Sandbox Code Playgroud)

或者赶上所有的cvs系统

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
Run Code Online (Sandbox Code Playgroud)

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

我还不能写评论所以... csexton的答案是不正确的,因为用户无法访问.svn文件夹,但可以访问其中的任何文件!例如,您可以访问 http://myserver.com/.svn/entries

正确的规则是

RedirectMatch 404 /\\.svn(/.*|$)
Run Code Online (Sandbox Code Playgroud)


小智 14

我认为Riccardo Galli做对了.即使apache已经将.svn设置为禁止我,但.svn/entries当然可用...暴露我的svn服务器,端口号,用户名等.

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

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

RedirectMatch 404 /\\..*(/.*|$)
Run Code Online (Sandbox Code Playgroud)

我在初始阶段之后添加了'.*' - 仅与Riccardo有所区别.似乎是404 .svn,.git,.blah等.

  • 因为您只需要检查URL路径是否包含一个后跟斜点的正斜杠,这也应该有效:`RedirectMatch 404/\. (3认同)

Chr*_*ens 6

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

以下是实现此目的的规则(包括Apache 2.2):

<LocationMatch "\/\..*">
    Order allow,deny
    Deny from all
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

(更新)或者您可以使用以下(适用于Apache 2.2和2.4):

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