我希望我的网站保持版本控制(特别是Subversion)并svn co
在有稳定版本更新时使用更新它,但是我担心这样做的安全性,因为所有.svn
文件夹都是公开的,这些包括各种私人数据,其中至少是我网站的完整源代码!
我有什么办法可以防止这种情况发生吗?
两件事情:
不要使用IfModule来实现您需要的功能.它可以用于自动索引,因为它可能不存在并且对于该方案不是至关重要的.但是你依靠重写来保护你的内容.因此,最好删除IfModule指令并让apache告诉你何时不存在重写以启用它(或者至少知道你不会被"保护"并有意识地评论这些行)
如果您可以访问主配置文件,则无需使用重写,更容易使用
Order allow,deny Deny from all
这将生成403 Forbidden(从HTTP合规性角度来看更好),或者,如果您想通过默认路由获取安全性,请使用AliasMatch
AliasMatch \.svn /non-existant-page
如果您无法访问主配置文件,那么您希望在.htaccess中启用mod_rewrite.
在同样的情况下,我使用RedirectMatch
了两个原因.首先,它是我能找到的唯一方法,允许在.htaccess
该服务器上使用相当严格的配置,我无法修改.另外我认为它最干净,因为它允许我告诉Apache是的,那里有一个文件,但只是假装它不是在服务时,所以返回404(而不是403会暴露网站浏览者不应该知道的东西) ).
我现在将以下内容视为.htaccess
文件的标准部分:
## Completely hide some files and directories. RedirectMatch 404 "(?:.*)/(?:[.#].*)$" RedirectMatch 404 "(?:.*)~$" RedirectMatch 404 "(?:.*)/(?:CVS|RCS|_darcs)(?:/.*)?$"
这可以在服务器范围内(推荐),在单个虚拟主机的基础上实现,甚至可以在.htaccess
文件内部实现,如果您的服务器对它们允许的内容稍微允许的话.您需要的具体配置是:
RewriteEngine On RewriteRule /\.svn /some-non-existant-404-causing-pageIndexIgnore .svn
第一部分要求mod_rewrite
.它会强制任何带有"/.svn"的请求(即对目录的任何请求,或目录中的任何内容)在内部重定向到您网站上不存在的页面.这对最终用户完全透明且不可检测.它还会强制发生404错误,就像您的.svn
文件夹刚刚消失一样.
第二部分纯粹是装饰性的,.svn
如果激活了自动索引模块,它将隐藏文件夹.这也是一个好主意,只是为了让好奇的灵魂得不到任何想法.
我使用以下命令向用户返回一个简单的404,而不是显示源控件目录实际存在:
RedirectMatch 404 /\.(svn | git)(/|)