Как закрыть доступ к исходникам в каталогах .svn
Решил недавно разместить веб-проект на сервере как рабочая копия SVN, чтобы сделать удобным публикацию с помощью SVN. Сразу возник логичный вопрос - а будут ли доступны извне каталоги .svn, которые создаются при этом в каждом каталоге проекта? Простая проверка через браузер показала, что если не используется модуль Rewrite то каталоги эти видны извне, а значит любой может зайти и прочесть исходные скрипты, например php. Получается огромная дыра в безопасности, которую нужно обязательно закрыть.
Первая идея, которая приходит в голову - это закрыть доступ в конфиге Apache. Только надо узнать как. Погуглив немного нашел решение, которое реально работает и выдает Forbidden при попытке зайти в каталог .svn:
<LocationMatch ".*\.svn.*">
Order allow,deny
Deny from all
</LocationMatch>
Чтобы не смешивать общие настройки Apache с настройками, добавляемые пользователем, рекомендуется добавлять их не в файл apache2.conf а в файл httpd.conf. Это сделано для удобства, когда все ваши настройки записаны отдельно, легче потом решать проблемы, возникающие при ошибках в добавляемых настройках.
После добавления выше описанной настройки, нужно перезагрузить Apache:
/etc/init.d/apache2 restart
Использовался дистрибутив Ubuntu 10.04
P.S.: При поиске нужной настройки, наткнулся на статьи и сообщениях на форумах, которые изрядно удивили. Оказывается на многих крупных и уважаемых сайтах, доступ к каталогам .svn не был закрыт до тех пор пока кто-то не опубликовал статью об уязвимости на сайтах, использующих SVN. Особенно понравился заголовок одной статьи - «SVN позволяет получить доступ к исходному коду». Аж как-то обидно за SVN стало - причем тут он? :) Как можно не думать о каталогах .svn на сайте, размещая их там? Наверное только если не знать об их существовании и их предназначении.