Запрет просмотра содержимого директории

Столкнулся на днях с проблемой, которую я бы назвал классической и имеющей непосредственное отношение к безопасности не только сайта, но и всего веб-сервера. Суть проблемы — это просмотр содержимого папки на веб-сервере 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. Для верности — можно перезагрузить 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). Задача решена. Благодарю за внимание!

Опубликовано: 28 декабря 2015 года, в рубрике «Серверная».

Просмотров: 11572.

Метки: .

Все публикации