Как запретить просмотр содержимого папки на сервере

Веб сервер Apache имеет несколько директив (находятся в файле httpd.conf), которые определяют, что будет показано, когда посетитель заходит в какую-то папку.
Прежде всего, это
DirectoryIndex
Она определяет, какой файл будет отправлен посетителю, если он не указал его имя явно. В параметрах этой директивы перечисляются имена файлов. Например:
DirectoryIndex index.php index.html index.htm
Приоритет имеет тот файл, который идет первым в списке. Т.е. если папка содержит index.php и index.html, то посетителю будет отправлен index.php.
Теперь небольшой пример. Допустим, сайт имеет такую структуру.
/
index.html
page1.html
page2.html
css/
styles.css
По адресу http://sitename/ вы увидите страницу index.html.
Но если зайти в папку css (http://sitename/css), то картинка будет примерно такая

Список файлов на сервере
Т.е. сервер покажет вам список файлов в этой папке. Не думаю, что кому-то понравится такое поведение сервера.
Исправить ситуацию можно с помощью директивы:
Options -Indexes
Примечание: символ «-» перед словом Indexes означает, что индексирование содержимого папок запрещено.
Теперь если вы попытаетесь зайти в папку css, то увидите сообщение:
Forbidden
You don't have permission to access /css/ on this server. (у вас нет прав для доступа к /css/ на этом сервере).
При этом доступ к файлу styles.css (http://sitename/css/styles.css) сохраняется.
Если вы не можете конфигурировать Apache (например, сайт находится на shared хостинге), то создайте в корне сайта файл .htaccess с этой директивой.
В этом случае индексирование будет запрещено не только для корневой папки, но и для всех вложенных папок (если, конечно, они не содержат своих файлов .htaccess).
Правда, этот метод может не работать. Дело в том, что обработка файлов .htaccess может быть запрещена директивой AllowOverride none (в файле httpd.conf).
В этом случае вам нужен либо доступ к httpd.conf, либо придется в каждой папке размещать файлы index.html с каким-нибудь текстом (что-то вроде Access forbidden). Кстати, разработчики фреймворка CodeIgniter именно так и поступают (в каждой вложенной в system папке находится index.html).
Примечание. Для того чтобы вступили в силу изменения в httpd.conf нужно перезапустить сервер. Изменения в .htaccess начнут работать сразу после сохранения файла.
Спонсор статьи:
Записки webмастера. Читать всем!
Понравилась статья? Подписывайтесь на продолжение
!
Опубликовано в Web разработка, htaccess, Безопасность Комментарии (23) »
Комментарии (23)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.









Директиву Options -Indexes нужно писать в корневом .htaccess? Это будет означать, что запрещено индексировать корневую папку?
Да. Кроме того, индексироваться не будут все вложенные папки.
Так, а индексирование документов (гуглом, яндексом и пр.) при этом будет продолжаться?
Конечно будет.
Запрещается индексирование файлов движка сайта, а не его страниц. Т.е. web сервер просто не будет возвращать список файлов в конкретной папке. Сами файлы будут доступны и любой поисковый робот их легко найдет, т.к. он использует ссылки на страницах.
Если нужно дать указания роботу – используйте robots.txt
берется софтина для скачивания всего сайта типа телепорта и вся эта защита отправляется лесом, все ваши "forbidden" страницы на жестком диске злоумышленника…
Те страницы, куда ссылок нет, не окажутся.
Те страницы, куда ссылок нет, — не окажутся.
dark_angel, m4rr прав.
Программы вроде телепорта находят только те страницы, на которые есть ссылки. И локальная версия сайта, которую они создают, в большинстве случаев вообще не соответствует структуре сайта на сервере.
Например, эта страница называется kak-zapretit-prosmotr-soderzhimogo-papki-na-servere.html
Если вы скачаете этот блог телепортом, то на вашем винчестере будет файл с таким названием. Но на сервере такого файла нет.
Страница создается скриптом index.php (он подключает другие скрипты), а название страницы рассматривается просто как параметр.
Используя его движок блога получает нужную информацию из базы данных.
Кстати, как насчёт того, что данная директива может не работать на некоторых версиях Apache даже при разрешении использования .htaccess
Как вариант, можно положить в папку index.html с каким-нибудь произвольным текстом, вроде "Доступ запрещен".
Доброе время суток!
У меня вскрыли сайт. На сайте есть папка, доступ к которой надо закрыть. .Htaccess не работает.
Вскрыли сайт таким образом – зашли в эту папку (к которой доступ закрыть надо), удалили один из файлов, и заменили его на файл с другим именем, в котором был вирус. По вашему совету, я разместил в этой папке index.html с переадресацией на главную страницу. Сможет ли хакер влезть еще раз в эту папку? Сайт ломают уже второй раз!
Приветствую!
Зайти в папку на сервере просто так нельзя, независимо от того есть index.html или нет (этот файл к защите в общем-то отношения не имеет, он просто будет отображаться вместо списка файлов в папке). Для входа на сервер нужен либо FTP доступ, либо нужно найти дыру в скрипте, который может сохранять файлы на сервере.
Например, если у вас есть скрипт, который используется для загрузок картинок на сервер и в нём не проверяется тип файла, то кто угодно сможет отправить вам в папку с картинками свой скрипт с вирусом.
Поэтому вам сейчас нужно определить как именно взломали ваш сайт и закрыть дыру. К сожалению, простого способа это выяснить не существует. Я бы сразу сменил пароль на FTP и начал проверять скрипты. Если вы используете какой-то движок, то желательно его обновить и поискать в интернете сообщения о его уязвимостях.
А вот вопрос "на встречу": как просмотреть содержимое папки, если в ней есть index.html?
Посмотреть его нельзя (если, конечно, у вас нет FTP доступа). Но получить файлы, которые в ней находятся – можно. Т.е. если в корне сайта лежат myfile.html и index.html, то запрос
http://mysite.domen/
вернет вам содержимое index.html, но на запрос
http://mysite.domen/myfile.html
вы получите myfile.html.
ну, это понятно. я думал, может есть какой-то хитрый способ известный спецам:)
Все супер хитрые способы в документации к апачу
У меня в чём-то похожая проблема. Не знаю, с чего начать копать.
Папка mydomain/docs – это DocumentRoot. В ней лежит index.php.
В mydomain/php лежат файлы, которые можно включать в скрипты
при помощи include('myclass.php').
Надо сделать так, чтобы подключить файл позволялось,
а считать его содержимое не позволялось бы:
//file: index.php
$c = file_get_contents('../php/myclass.php');
echo $c;
Вынесите файлы за пределы DocumentRoot, например, на уровень выше. И подключайте так:
include('../myclass.php')
эти файлы уже находятся за пределами DocumentRoot.
Смысл в том, чтобы защитить эти файлы от глюканувшего
(или хакнутого) скрипта, выполняемого в DocumentRoot.
Может, надо чего-то прописать в php.ini?
Настройки какие-то для защищённого режима, права доступа…
Т.е. надо, чтобы, скрипты не имели доступа к файлам
за пределами DocumentRoot, но могли инклюдить те из них, что
в path_include.
Закрыть доступ к файлам для скрипта можно изменением прав доступа. Причем закрыть для отдельного скрипта не получится. Скрипты выполняются интерпритатором PHP, который в свою очередь запущен апачем. Т.к. права доступа выставляются для пользователей, то вам нужно посмотреть от имени какого пользователя запускается apache и выставить соответствующие права для файла.
Если речь идет о shared хостинге, то apache работает от имени какого-то администратора. Вы можете с помощью FTP клиента изменить права на доступ к файлу, оставить доступ только для себя (например, так chmod 600). После этого у скриптов доступа к файлу не будет.
chmod 666 предоставит доступ на чтение и запись всем.
chmod 644 – доступ на запись только для себя, на чтение – остальным.
В общем, если у вас есть скрипт, которому для работы нужны данные подключения к БД. И кто-то его хакнет, то этот кто-то получит ваш пароль к базе.
Доброго времени суток!
У меня вопрос по теме поста. Допустим, у меня на сайте есть много директорий с разными названиями, но в каждой из них лежат два файла с именами xxx.html и yyy.html
Мне нужно запретить доступ к xxx.html, но при этом вместо ошибки 403 делать редирект на yyy.html
Как решить первую чать задачи (запретить доступ), я знаю. Помогите пожалуйста с организацией редиректа.
Попробуйте так
redirect 301 /xxx.html /yyy.html
Возможно нужно будет убрать правила, которые запрещают доступ к файлу xxx.html