安全性:拒绝通过mod_rewrite访问.hg / *

时间:2010-03-02 08:01:39

标签: .htaccess mod-rewrite mercurial

我的网站是一个包含多个子存储库的mercurial存储库。我需要确保我拒绝访问服务器上每个.hg目录中的所有文件。

例如,我有http://example.com/.hg/http://example.com/subrepo1/.hg/

我已将以下内容添加到.htaccess:

<Files ~ "^\.(hg|ht)">
    Order allow,deny
    Deny from all
</Files>

这是一个好的开始,因为它拒绝访问以.hg.ht开头的文件,但它不会拒绝访问.hg目录中的文件,所以如果有人类型,例如http://example.com/.hg/branch,分支文件将显示在他们的浏览器中。

为了确保这些文件不会显示给用户,我需要做什么?如果有人试图访问我服务器上任何.hg目录中的文件,我想将403或404发送回浏览器。

此问题也适用于网站为subversion / svn存储库的任何人。

3 个答案:

答案 0 :(得分:7)

如果您没有 使用mod_rewrite,那么您可以这样做:

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

(完全披露:来自this question的关于Mercurial的回答,关于为Subversion做同样的事情)。

答案 1 :(得分:0)

您始终可以将.htaccess文件放在这些文件夹中,并拒绝文件夹中的所有访问权限。

我假设您需要一个解决方案,您不必将.htaccess文件放在每个文件夹和子文件夹中?

尝试以下操作(假设您具有对网络服务器的ssh访问权限):

  • 更改为您网站的DocumentRoot
  • 创建.htaccess文件

内容:

Order deny, allow
Deny from all
  • 执行以下命令:

    find . -type d -name .hg -exec cp ./.htaccess {} \;

  • 然后再次从文档根目录中删除.htaccess文件

答案 2 :(得分:0)

如果您只是将存储库完全保留在DocumentRoot之外,那么这就不那么令人担忧了。你可能正在使用hgweb或hgwebdir,它们不需要文件在DocumentRoot中,所以不要这样做。将它们放在/ home / hg / repos或者其他东西中并配置你的hgwebdir.conf来查看那里。

在DocumentRoot中使用repos的唯一原因是为mercurial启用static-http URL表单,但它非常慢,并且在可能的情况下总是首选hgweb。