代码之家  ›  专栏  ›  技术社区  ›  csexton

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

  •  56
  • csexton  · 技术社区  · 16 年前

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

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

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

    13 回复  |  直到 16 年前
        1
  •  63
  •   Vinko Vrsalovic    16 年前

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

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

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

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

        2
  •  44
  •   csexton    16 年前

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

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

        3
  •  30
  •   Riccardo Galli    13 年前

    我不喜欢用一个点开始404每个文件的想法。 我会使用一种更具选择性的方法,或者是我在项目中使用的cvs(示例中为svn)

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

    或者是一个全面的cvs系统

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

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

    csexton的答案不正确,因为用户无法访问.svn文件夹,但可以访问其中的任何文件! http://myserver.com/.svn/entries

    正确的规则是

    RedirectMatch 404 /\\.svn(/.*|$)
    
        4
  •  14
  •   triemstr    14 年前

    我想里卡多·加利说得对。甚至apache已经禁止了.svn设置,但是.svn/entries肯定是可用的……公开了我的svn服务器、端口号、用户名等。

    然后我想,为什么不限制所有应该隐藏的东西呢?有人能想到这个问题吗?

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

        5
  •  6
  •   Christophe Deliens    9 年前

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

    以下是实现这一点的规则(在包含Apache 2.2之前):

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

    (更新)

    # Deny access to dot-files, as 404 error
    # (not giving hint about potential existence to the file)
    RedirectMatch 404 ".*\/\..*"
    
        6
  •  1
  •   Stefan Lasiewski    15 年前

    重定向匹配将以404响应,这很好。

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

    用户将无法进入该目录——这就是“404未找到”的原因。但是,他们将能够看到该目录,并为可能的攻击者提供线索。

        7
  •  1
  •   Xorax    14 年前

    在我看来,Apache conf应该是:

    <Directory ~ "\.svn">
        Order allow,deny
        Deny from all
    </Directory>
    
        8
  •  1
  •   Mikaciù    12 年前

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

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

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

        9
  •  1
  •   R4wizard Spanky    10 年前

    我不太喜欢重定向匹配,所以我使用了重写规则:

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

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

    所以我拿出了一个,效果很好。我不明白你为什么要用两个。有人想启发我吗?

        10
  •  1
  •   M_per    9 年前

    # 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

        11
  •  1
  •   Georgi D. Sotirov    6 年前

    RedirectMatch与来自mod_alias的其他指令一样,即使在不区分大小写的文件系统上也是区分大小写的(请参阅 mod_alias documentation )。因此,上述关于所有版本控制系统的匹配和阻止文件的答案不正确。

    而不是

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

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

    这样的事情是必要的

    RedirectMatch 404 "(?i)/\.?(cvs|svn|git|hg|bzr)"
    

    要真正阻止一切,因为

    • 不要从前面的点开始。

    我希望这有帮助。

        12
  •  0
  •   Pratik Kamani    7 年前

    (1)

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

    (2)

    RedirectMatch 404 /\.git
    

    将这两种方法都放在 .htaccess 文件

        13
  •  -7
  •   Community CDub    5 年前

    e、 如果你的文件夹结构是

    /svn/rights/svnauth.conf

    创建一个配置文件,并在apache subversion配置文件中输入该文件的路径,通常可以在

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

    Foo.com的访问权限

    [foo.com:/trunk/source]

    dev1=rw

    dev2=rw

    有关更多信息,请仔细阅读svn红皮书。