Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 如何在Apache中隐藏目录,特别是源代码管理?_Svn_Apache - Fatal编程技术网

Svn 如何在Apache中隐藏目录,特别是源代码管理?

Svn 如何在Apache中隐藏目录,特别是源代码管理?,svn,apache,Svn,Apache,我想让我的网站保持版本控制(特别是Subversion),并在有稳定版本需要更新时使用svn co进行更新,但我担心这样做的安全性,因为所有.svn文件夹都是公共的,其中包括各种私有数据,其中最重要的是完整的源代码到我的网站 我能做些什么来防止这种情况发生吗?这可以在服务器范围内(推荐)、在单个虚拟主机上实现,甚至可以在.htaccess文件中实现,如果您的服务器对文件中允许的内容有一定的许可。您需要的具体配置是: RewriteEngine On RewriteRule /\.svn /som

我想让我的网站保持版本控制(特别是Subversion),并在有稳定版本需要更新时使用
svn co
进行更新,但我担心这样做的安全性,因为所有
.svn
文件夹都是公共的,其中包括各种私有数据,其中最重要的是完整的源代码到我的网站


我能做些什么来防止这种情况发生吗?

这可以在服务器范围内(推荐)、在单个虚拟主机上实现,甚至可以在
.htaccess
文件中实现,如果您的服务器对文件中允许的内容有一定的许可。您需要的具体配置是:

RewriteEngine On
RewriteRule /\.svn /some-non-existant-404-causing-page

<IfModule autoindex_module>
    IndexIgnore .svn
</IfModule>
重新编写引擎打开
重写规则/\.svn/some-non-existant-404-causing-page
IndexIgnore.svn
第一部分需要
mod_rewrite
。它强制将其中包含“/.svn”的任何请求(即对目录的任何请求或目录中的任何内容)在内部重定向到网站上不存在的页面。这对最终用户来说是完全透明的,并且是不可检测的。它还强制执行404错误,就好像您的
.svn
文件夹刚刚消失一样

第二部分纯粹是装饰性的,如果自动索引模块被激活,它将从中隐藏
.svn
文件夹。这也是一个好主意,只是为了防止好奇的灵魂得到任何想法。

两件事:

  • 不要使用IfModule实现您需要的功能。对自动索引执行此操作是可以的,因为它可能不存在,并且对方案不重要。但你指望重写来保护你的内容。因此,最好删除IfModule指令,让apache告诉您何时不存在重写,以便启用它(或者至少知道您不会受到“保护”,并有意识地注释行)

  • 如果您可以访问主配置文件,则无需在那里使用“重写”,这将是一种更简单的方法

    <DirectoryMatch \.svn>
       Order allow,deny
       Deny from all
    </DirectoryMatch>
    

    如果您没有访问主配置文件的权限,您只能希望mod_rewrite能够在.htaccess中使用。

    按照Vinko的说法隐藏目录应该可以。但是它可能比svn co更容易使用。这不应该生成.svn目录

    我使用了一种有趣的方法:签出(和更新)在一个完全独立的目录(可能在一台完全独立的机器上)上完成,然后将代码复制到Web服务器使用rsync读取代码的地方。rsync命令行上的--exclude规则用于使其不复制任何.svn(和CVS)目录,而--delete excluded则确保即使以前复制过它们,也会将它们删除

    由于svn update和rsync都进行增量传输,因此即使对于较大的站点,这种传输速度也相当快。它还允许您将存储库置于防火墙后面。唯一需要注意的是,必须将服务器上生成文件的所有目录(如Drupal上的文件/目录)移动到rsync目标目录之外的位置(以这种方式使用时,rsync将覆盖所有内容),并且必须在rsync源目录中创建指向它的符号链接。rsync源目录也可以有其他非版本文件(如特定于机器的配置文件)

    我使用的整套rsync参数是

    rsync -vv --rsh='ssh -l username' -rltzpy --exclude .svn/ --exclude CVS/ --exclude Attic/ --delete-after --delete-excluded --chmod=og-w,Fa-x
    

    即使如此,为了冗余,我仍然有一个配置规则来防止访问.svn,它是从Debian默认规则复制的,该默认规则防止访问.ht*(.htaccess.htpasswd)。

    考虑使用操作系统的包管理工具部署实时代码,而不是直接从VCS部署。这将使您能够确保live软件包不包含元数据目录或其他可能敏感的工具和数据。

    在相同的情况下,我使用了
    RedirectMatch
    ,原因有二。基本上,这是我能找到的唯一一种在该服务器上的
    .htaccess
    中允许的方法,该服务器的配置非常严格,我无法修改。此外,我认为它最干净,因为它允许我告诉Apache,是的,那里有一个文件,但只是假装它不是在服务时,所以返回404(而不是403,这会暴露网站观众不应该知道的东西)。

    我现在把下面的代码看作是我的代码> .HTAccess 文件的标准部分:

    ## Completely hide some files and directories. RedirectMatch 404 "(?:.*)/(?:[.#].*)$" RedirectMatch 404 "(?:.*)~$" RedirectMatch 404 "(?:.*)/(?:CVS|RCS|_darcs)(?:/.*)?$" ##完全隐藏一些文件和目录。 重定向匹配404“(?:.*)/(?:[.#].*)” 重定向匹配404“(?:.*)~$” 重定向匹配404“(?:*)/(?:CVS | RCS | | | darcs)(?:/*)”
    我使用以下命令,向用户返回一个简单的404,但不显示源代码管理目录实际上存在:


    重定向匹配404/\(svn | git)(/|$)

    我理解403的要点。就我个人而言(在这种情况下,永远不应该提供文件),我更希望他们不知道目录的存在。我也要试试这个别名匹配。这就是我从谷歌那里收集到的,我总是很高兴能找到更好的解决方案。请注意,如果您试图在共享/虚拟主机上执行此操作,则在.htaccess文件中不起作用。如果您没有访问httpd.conf文件的权限,请使用您的答案。对。mod_rewrite也可能无法在.htaccess文件中使用。(如中所示,如果您的服务器对其中允许的内容有一定的权限),您也可以将此解决方案与RedirectMatch一起使用,这将产生大致相同的结果,并且可用于.htaccess文件。这是一个更复杂的解决方案,但是如果你没有MODYRead Access,它也可以工作。你可能需要从最近的Apache版本简单的“允许,拒绝”中取出空白,但是你不能得到增量更新的好处。如果我修改了一个图像和两个脚本,我真的需要放下MB(并在执行操作时使站点处于维护模式)而不是几秒钟进行签出吗?请参阅( ## Completely hide some files and directories. RedirectMatch 404 "(?:.*)/(?:[.#].*)$" RedirectMatch 404 "(?:.*)~$" RedirectMatch 404 "(?:.*)/(?:CVS|RCS|_darcs)(?:/.*)?$"