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


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

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

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

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

12 56

12 ответов:

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

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

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

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

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

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

RedirectMatch 404 /\.svn(/|$)

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

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

RedirectMatch 404 /\.svn(/|$)

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

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

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

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

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

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

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

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

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

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

Я добавил '.* 'после начального периода-только отличие от Риккардо. Кажется, 404 .СВН .мерзавец. ,мля, и т. д.

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

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

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

RedirectMatch ответит с 404, что здорово.

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

пользователи не смогут войти в каталог-это, где '404 не найдено' приходит. Тем не менее, они смогут увидеть каталог и предоставить подсказки для злоумышленников.

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

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

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

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

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

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

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

Apache Subversion FAQ является sugesting это решение:

# 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

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

(1)

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

и (2)

RedirectMatch 404 /\.git

поместите этот метод в .

он скрывает любой файл или каталог, имя которого начинается с .ГИТ нравится .каталог Git или .gitignore файл, возвращая 404.

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

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

/ svn

/ svn / rights / svnauth.conf

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

в вашем svnauth.файл conf определяет права как :

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

[foo. com: / trunk / source]

dev1=rw

dev2=rw .....

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

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