Столкнулся на днях с проблемой, которую я бы назвал классической и имеющей непосредственное отношение к безопасности не только сайта, но и всего веб-сервера. Суть проблемы — это просмотр содержимого папки на веб-сервере Apache.
Теория вопроса
Дело все в том, что в директивах Apache определен файл или список файлов, которые будут показаны по умолчанию.
Что это значит? Если посетитель заходит по адресу site.ru/about.php — имя файл указано явно. Если посетитель заходит по адресу site.ru/about/ — показан будет файл, указанный в параметрах Apache в качестве индексного. А вот такую картину мы получим если такого файла в папке нет:

Как же решить эту проблему? На самом деле все очень просто. Мне известны два способа:
- запретить листинг, используя файл
.htaccess; - запретить построение списка файла на уровне сервера.
Рассмотрим оба способа более подробно.
Запрет листинга каталогов через .htaccess
Достаточно добавить всего одну простую строчку:
# запрет выдачи листинга Options -Indexes
Данное условие действует на все вложенные/дочерние папки. Следовательно, добавление данного условия в корневой файл .htaccess запрещает листинг директорий для всего сайта. При необходимости всегда можно разрешить выдачу листинга для конкретно взятой директории, для этого достаточно разместить в ней все тот же .htaccess, в котором будет содержаться следующий текст:
# разрешение выдачи листинга Options Indexes
Как Вы уже могли заметить, разница между запретом и разрешением состоит только в символе -. Именно он обозначает, что индексирование папки запрещено.
С первым способом решения задачи все. Он идеален для тех случаев, когда нет доступа к конфигурации сервера, либо отсутствует желание/навыки в них лезть.
Запрет листинга каталогов через директивы Apache
Фактически все те же самые манипуляции можно проделать в настройках самого веб-сервера.
Для этого достаточно открыть конфигурационный файл httpd.conf (или apache2.conf) и добавить в него всю ту же самую строку: Options -Indexes. Например так:
<Directory /var/www> Options -Indexes </Directory>
Для верности — можно перезагрузить Apache. Небольшая шпаргалка, которая поможет в поисках системного файла.
Где расположен конфигурационный файл httpd.conf
Местонахождение данного файла напрямую зависит от операционной системы, установленной на сервере, а также версии Apache. Приведу небольшой список, который может облегчить поиск.
Debian, Ubuntu
apache 1.3
/etc/apache/httpd.conf
apache 2.2
/etc/apache2/apache2.conf
FreeBSD
apache 1.3
/usr/local/etc/apache/httpd.conf
apache 2.2
/usr/local/etc/apache22/httpd.conf
Linux (CentOS, Fedora)
/etc/httpd/conf/httpd.conf
Gentoo
apache 2.0
/etc/apache2/httpd.conf
Заключение
В результате работы обоих способов, вместо листинга папок мы получим ошибку 403, которая сообщает нам о том, что доступ закрыт (access forbidden). Задача решена. Благодарю за внимание!
Комментарии
Оставить комментарий