如何在Apache中隐藏目录,特别是源代码控制?

Mat*_*ley 26 svn apache

我希望我的网站保持版本控制(特别是Subversion)并svn co在有稳定版本更新时使用更新它,但是我担心这样做的安全性,因为所有.svn文件夹都是公开的,这些包括各种私人数据,其中至少是我网站的完整源代码!

我有什么办法可以防止这种情况发生吗?

Vin*_*vic 38

两件事情:

  1. 不要使用IfModule来实现您需要的功能.它可以用于自动索引,因为它可能不存在并且对于该方案不是至关重要的.但是你依靠重写来保护你的内容.因此,最好删除IfModule指令并让apache告诉你何时不存在重写以启用它(或者至少知道你不会被"保护"并有意识地评论这些行)

  2. 如果您可以访问主配置文件,则无需使用重写,更容易使用

    <DirectoryMatch \.svn>
       Order allow,deny
       Deny from all
    </DirectoryMatch>
    
    Run Code Online (Sandbox Code Playgroud)

这将生成403 Forbidden(从HTTP合规性角度来看更好),或者,如果您想通过默认路由获取安全性,请使用AliasMatch

    AliasMatch \.svn /non-existant-page
Run Code Online (Sandbox Code Playgroud)

如果您无法访问主配置文件,那么您希望在.htaccess中启用mod_rewrite.

  • 你需要从最近的apache版本的"allow,deny"中取出空白区域 (3认同)

Gil*_*il' 8

在同样的情况下,我使用RedirectMatch了两个原因.首先,它是我能找到的唯一方法,允许在.htaccess该服务器上使用相当严格的配置,我无法修改.另外我认为它最干净,因为它允许我告诉Apache是​​的,那里有一个文件,但只是假装它不是在服务时,所以返回404(而不是403会暴露网站浏览者不应该知道的东西) ).

我现在将以下内容视为.htaccess文件的标准部分:

## Completely hide some files and directories.
RedirectMatch 404 "(?:.*)/(?:[.#].*)$"
RedirectMatch 404 "(?:.*)~$"
RedirectMatch 404 "(?:.*)/(?:CVS|RCS|_darcs)(?:/.*)?$"


Mat*_*ley 7

这可以在服务器范围内(推荐),在单个虚拟主机的基础上实现,甚至可以在.htaccess文件内部实现,如果您的服务器对它们允许的内容稍微允许的话.您需要的具体配置是:

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

<IfModule autoindex_module>
    IndexIgnore .svn
</IfModule>
Run Code Online (Sandbox Code Playgroud)

第一部分要求mod_rewrite.它会强制任何带有"/.svn"的请求(即对目录的任何请求,或目录中的任何内容)在内部重定向到您网站上不存在的页面.这对最终用户完全透明且不可检测.它还会强制发生404错误,就像您的.svn文件夹刚刚消失一样.

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


Erw*_*wan 5

我使用以下命令向用户返回一个简单的404,而不是显示源控件目录实际存在:

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