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

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

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

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

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

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 setup как запрещено для меня, но .svn / записи, безусловно, были доступны...предоставление моего сервера svn, номера порта,имен пользователей и т. д.

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

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

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

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


Я бы предпочел запретить доступ ко всем точечным файлам (например: .htaccess,.СВН .ХХХ и т. д.), поскольку они обычно не должны быть доступны в интернете.

вот правило для достижения этого (до включения 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, что отлично.

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

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


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

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

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

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 нравится .каталог Git или .gitignore файл, возвращая 404.


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

e.g если структура папок

/ svn

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

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

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

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

[foo.com:/trunk / source]

dev1=rw

dev2=rw .....

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

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