Подтвердить что ты не робот

Запретить доступ к папкам .svn на Apache

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

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

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

Мне не очень нравится идея удаления папок или экспорта svn, так как я хотел бы сохранить информацию о svn.

4b9b3361

Ответ 1

Лучшим вариантом является использование конфигурации Apache.

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

или уловить все системы cvs

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

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

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

Правильное правило

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

Ответ 4

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

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

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

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

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

Ответ 5

Я предпочел бы запретить доступ ко всем точечным файлам (например:.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 ".*\/\..*"

Ответ 6

Это:

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

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

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

Ответ 7

RedirectMatch ответит 404, что отлично.

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

Пользователи не смогут войти в каталог - здесь находится "404 Not Found". Тем не менее, они смогут увидеть каталог и предоставить подсказки, которые будут атакующими.

Ответ 8

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

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

Ответ 9

Я не очень люблю RedirectMatch, поэтому вместо этого использовал RewriteRule:

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

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

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

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

Ответ 10

Часто задаваемые вопросы о Subversion для Apache:

# 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

Ответ 11

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

(1)

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

А (2)

RedirectMatch 404 /\.git

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

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

Ответ 12

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

Например, если структура папок

/СВН

/svn/rights/svnauth.conf

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

В файле svnauth.conf укажите права как:

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

[foo.com:/trunk/source]

dev1 = RW

DEV2 = RW .....

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

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