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