Безопасность: запретить доступ к .hg / * через mod_rewrite - PullRequest
6 голосов
/ 02 марта 2010

Мой веб-сайт - это ртутный репозиторий с несколькими вложенными репозиториями.Мне нужно убедиться, что я запрещаю доступ ко всем файлам в каждом каталоге .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, файл ветки будет отображаться в их браузере.

Что мне нужно сделать, чтобы эти файлы не отображались пользователю?Я хотел бы отправить 403 или 404 обратно в браузер, если кто-то попытается получить доступ к файлу в любом каталоге .hg на моем сервере.

Этот вопрос также актуален для всех, чей веб-сайт являетсяSubversion / SVN репозиторий.

Ответы [ 3 ]

7 голосов
/ 02 марта 2010

Если у вас нет для использования mod_rewrite, то вы можете просто сделать это:

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

(Полное раскрытие: ответ адаптирован для Mercurial от на этот вопрос о том же для Subversion).

0 голосов
/ 02 марта 2010

Это гораздо менее важно, если вы просто храните репозитории вне вашей DocumentRoot. Вы, вероятно, используете hgweb или hgwebdir, которые не требуют, чтобы файлы были внутри DocumentRoot, поэтому не делайте этого. Поместите их в / home / hg / repos или что-то в этом роде и настройте свой hgwebdir.conf, чтобы он там смотрел.

Единственной причиной наличия репозиториев внутри DocumentRoot является включение URL-адреса static-http для mercurial, но она очень медленная, и hgweb всегда предпочтительнее, когда это возможно.

0 голосов
/ 02 марта 2010

У вас всегда есть возможность поместить файлы .htaccess в эти папки и запретить любой доступ в папке.

Я предполагаю, что вам нужно решение, при котором вам не нужно помещать файлы .htaccess в каждую папку и подпапку?

Попробуйте выполнить следующее (при условии, что у вас есть доступ ssh к веб-серверу):

  • Перейдите в DocumentRoot вашего сайта
  • создать файл .htaccess

Содержание:

Order deny, allow
Deny from all
  • Выполнить следующую команду:

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

  • После этого снова удалите файл .htaccess из корневого каталога документа

...