Вопрос

У нас есть приложение rails в subversion, которое мы развертываем с помощью Capistrano, но заметили, что мы можем получить доступ к файлам в '/.svn', что представляет проблему безопасности.

Я хотел знать, каков наилучший способ сделать это.Несколько идей:

  • Глобальная конфигурация Apache для запрета доступа
  • Добавление файлов .htaccess в общую папку и все вложенные папки
  • Ограничьте задачу, которая изменяет разрешения

Мне не очень нравится идея удаления папок или использования svn export, так как я хотел бы сохранить "svn info".

Это было полезно?

Решение

Лучший вариант - использовать конфигурацию Apache.

Использование htaccess или глобальной конфигурации зависит главным образом от того, управляете ли вы своим сервером.

Если вы это сделаете, вы можете использовать что-то вроде

<DirectoryMatch .*\.svn/.*>
    Deny From All
</DirectoryMatch>

Если вы этого не сделаете, вы можете сделать что-то подобное в файлах .htaccess с помощью FilesMatch

Другие советы

Еще одним способом защиты файлов .svn было бы использовать перенаправление в конфигурации Apache:

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

Таким образом, вместо получения 403 запрещенных (и предоставления подсказок потенциальным злоумышленникам) вы получаете 404, чего и следовало ожидать при случайном вводе путей.

Мне не нравится идея 404, чтобы каждый файл начинался с точки.Я бы использовал более избирательный подход, либо с cvs, которые я использую в проекте (svn в примере).

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

или охватить все системы cvs

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

-- далее следует устаревший ответ (см. Комментарии) --

Я пока не могу писать комментарии, поэтому...Ответ csexton неверен, потому что пользователь не может получить доступ к папке .svn, но может получить доступ к любым файлам внутри нее !например ,вы можете получить доступ http://myserver.com/.svn/entries

Правильным правилом является

RedirectMatch 404 /\\.svn(/.*|$)

Я думаю, Риккардо Галли все понял правильно.Даже у apache уже была настройка .svn как запрещенная для меня, но .svn/entries, безусловно, был доступен ... предоставляя мой svn-сервер, номер порта, имена пользователей и т.д.

Я действительно думаю, почему бы не ограничить .git в качестве превентивной меры (допустим, вы еще не используете git, но, возможно, когда-нибудь, в это время, вы не будете думать об ограничениях каталога).

И тогда я подумал, почему бы не ограничить все, что в любом случае должно быть скрыто?Кто-нибудь может представить себе проблему с этим?

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

Я добавил '.*' после начального периода - единственное отличие от Риккардо.Кажется, 404 .svn, .git, .blah и т.д.

Я бы предпочел запретить доступ ко всем точечным файлам (например:.htaccess, .svn, .xxx и т.д.), поскольку обычно они не обязательно должны быть доступны через Интернет.

Вот правило для достижения этого (до тех пор, пока не будет включен Apache 2.2):

<LocationMatch "\/\..*">
    Order allow,deny
    Deny from all
</LocationMatch>

(ОБНОВЛЕНИЕ) Или вы можете использовать следующее (которое работает в Apache 2.2 и 2.4):

# Deny access to dot-files, as 404 error
# (not giving hint about potential existence to the file)
RedirectMatch 404 ".*\/\..*"

Это:

RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /

также может быть использован, если вы не хотите отправлять ошибку обратно пользователю.

Это всего лишь перенаправление обратно на корневую страницу сайта.Кроме того, это постоянное перенаправление, поэтому роботы не будут пытаться переиндексировать этот URL.

Перенаправление ответит 404, и это здорово.

Однако, если "Параметры + Индексы" включены, пользователи по-прежнему смогут видеть каталог '.svn' из родительского каталога.

Пользователи не смогут войти в каталог - именно здесь появляется сообщение "404 Не найдено".Однако они смогут просмотреть каталог и предоставить подсказки потенциальным злоумышленникам.

Мне кажется, Apache conf должен быть :

<Directory ~ "\.svn">
    Order allow,deny
    Deny from all
</Directory>

Мне не очень нравится RedirectMatch, поэтому вместо этого я использовал RewriteRule:

RewriteRule /\..*(/.*|$) - [R=404,L]

Дефис означает "не делайте никакой замены".Я также не мог понять, почему в приведенных выше примерах регулярное выражение имело две обратные косые черты:

/\\..*(/.*|$)

Так что я достал один, и он отлично работает.Я не могу понять, зачем вам понадобилось использовать там два.Кто-нибудь хочет меня просветить?

Apache Subversion FAQ предлагает это решение:

# Disallow browsing of Subversion working copy administrative dirs.
<DirectoryMatch "^/.*/\.svn/">
    Order deny,allow
    Deny from all
</DirectoryMatch>

Источник: https://subversion.apache.org/faq.html#website-auto-update

RedirectMatch, как и другие директивы из mod_alias, чувствителен к регистру даже в файловых системах без учета регистра (см. документация mod_alias).Таким образом, приведенные выше ответы о сопоставлении и блокировке файлов во всех системах контроля версий неверны.

Вместо того , чтобы

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

или

RedirectMatch permanent .*\.(svn|git|hg|bzr|cvs)/.* /

что-то подобное необходимо

RedirectMatch 404 "(?i)/\.?(cvs|svn|git|hg|bzr)"

чтобы действительно заблокировать все, потому что

  • Каталоги CVS написаны заглавными буквами;и
  • не начинайте с точки (.) впереди.

Я надеюсь, что это поможет.

В .htaccess в файле конфигурации вашего сервера.

(1)

RewriteEngine on
RewriteRule "^(.*/)?\.git/" - [F,L]

И (2)

RedirectMatch 404 /\.git

Поместите этот метод both в .htaccess файл.

Он скрывает любой файл или каталог, имя которого начинается с .git, например .git directory или .gitignore file, возвращая значение 404.

Создайте файл прав доступа в вашей установке subversion server.

например, если ваша структура папок является

/svn

/svn/права/svnauth.conf

создайте файл конфигурации и введите путь к этому файлу в вашем файле конфигурации apache subversion, который вы обычно находите по адресу /etc/httpd/conf.d/subversion.conf

В вашем файле svnauth.conf определите права следующим образом :

права доступа для Foo.com

[foo.com:/trunk/источник]

dev1=rw

dev2=rw .....

Таким образом, вы можете управлять правами доступа из одного файла и на более детальном уровне.

Для получения дополнительной информации ознакомьтесь с svn red book.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top