首页 文章

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

提问于
浏览
56

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

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

  • 拒绝访问的全局Apache配置

  • 在公用文件夹和所有子文件夹中添加.htaccess文件

  • 更改权限的上限任务

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

12 回答

  • 1

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

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

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

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

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

  • 2

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

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

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

  • 6

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

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

    或者赶上所有的cvs系统

    RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)
    
    • 过时的答案如下(见评论) -

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

    正确的规则是

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

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

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

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

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

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

  • 43

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

    以下是实现此目的的规则(包括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 ".*\/\..*"
    
  • 30

    这个:

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

    如果您不想将错误发送回用户,也可以使用它 .

    它只会重定向回站点根页面 . 此外,这是永久重定向,因此机器人不会尝试重新索引此网址 .

  • 1

    RedirectMatch将以404响应,这很棒 .

    但是,如果启用了“选项索引”,则用户仍然可以从父目录中看到“.svn”目录 .

    用户将无法进入目录 - 这是'404 Not Found'的用武之地 . 但是,他们将能够查看目录并提供攻击者的线索 .

  • 1

    在我看来,Apache conf应该是:

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

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

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

    连字符表示“不做任何替换” . 我也无法弄清楚为什么,在上面的例子中,正则表达式有两个反斜杠:

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

    所以我拿了一个,它工作正常 . 我无法弄清楚为什么你会在那里使用两个 . 有人关心赐教吗?

  • -7

    Apache Subversion常见问题解答正在酝酿这个解决方案:

    # 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

  • 63

    在.htaccess上的服务器配置文件 .

    (1)

    RewriteEngine on
    RewriteRule "^(.*/)?\.git/" - [F,L]
    

    (2)

    RedirectMatch 404 /\.git
    

    将此方法放在 .htaccess 文件中 .

    它隐藏任何名称以.git开头的文件或目录,如.git目录或.gitignore文件,返回404 .

  • 14

    在subversion服务器安装中创建访问权限文件 .

    例如,如果文件夹结构是

    / SVN

    /svn/rights/svnauth.conf

    创建配置文件并在apache subversion配置文件中输入该文件的路径,您通常可以在/etc/httpd/conf.d/subversion.conf中找到该文件

    在您的svnauth.conf文件中,将权限定义为:

    Foo.com的访问权限

    [foo.com:/trunk/source]

    DEV1 = RW

    dev2 = rw .....

    通过这种方式,您可以在一个单一的文件级别上控制访问权限 .

    有关详细信息,请参阅svn红皮书 .

相关问题