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

7 августа, 2008

Логотип для htaccess

Веб сервер 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мастера. Читать всем!

Понравилась статья? Подписывайтесь на продолжение rss link !

Или на мой твиттер twitter link

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в Web разработка, htaccess, Безопасность View Comments

]]>
  • Alex
    Отличная статья. Спасибо.
  • Попробуйте так
    redirect 301 /xxx.html /yyy.html
    Возможно нужно будет убрать правила, которые запрещают доступ к файлу xxx.html
  • Доброго времени суток!
    У меня вопрос по теме поста. Допустим, у меня на сайте есть много директорий с разными названиями, но в каждой из них лежат два файла с именами xxx.html и yyy.html
    Мне нужно запретить доступ к xxx.html, но при этом вместо ошибки 403 делать редирект на yyy.html
    Как решить первую чать задачи (запретить доступ), я знаю. Помогите пожалуйста с организацией редиректа.
  • qq
    эти файлы уже находятся за пределами DocumentRoot.
    Смысл в том, чтобы защитить эти файлы от глюканувшего
    (или хакнутого) скрипта, выполняемого в DocumentRoot.
    Может, надо чего-то прописать в php.ini?
    Настройки какие-то для защищённого режима, права доступа...
    Т.е. надо, чтобы, скрипты не имели доступа к файлам
    за пределами DocumentRoot, но могли инклюдить те из них, что
    в path_include.
  • защитить эти файлы от глюканувшего(или хакнутого) скрипта


    Закрыть доступ к файлам для скрипта можно изменением прав доступа. Причем закрыть для отдельного скрипта не получится. Скрипты выполняются интерпритатором PHP, который в свою очередь запущен апачем. Т.к. права доступа выставляются для пользователей, то вам нужно посмотреть от имени какого пользователя запускается apache и выставить соответствующие права для файла.

    Если речь идет о shared хостинге, то apache работает от имени какого-то администратора. Вы можете с помощью FTP клиента изменить права на доступ к файлу, оставить доступ только для себя (например, так chmod 600). После этого у скриптов доступа к файлу не будет.

    chmod 666 предоставит доступ на чтение и запись всем.

    chmod 644 - доступ на запись только для себя, на чтение - остальным.

    В общем, если у вас есть скрипт, которому для работы нужны данные подключения к БД. И кто-то его хакнет, то этот кто-то получит ваш пароль к базе.
  • Вынесите файлы за пределы DocumentRoot, например, на уровень выше. И подключайте так:
    include('../myclass.php')
  • qq
    $c = file_get_contents('../php/myclass.php');
    echo $c;
  • qq
    У меня в чём-то похожая проблема. Не знаю, с чего начать копать.
    Папка mydomain/docs - это DocumentRoot. В ней лежит index.php.
    В mydomain/php лежат файлы, которые можно включать в скрипты
    при помощи include('myclass.php').
    Надо сделать так, чтобы подключить файл позволялось,
    а считать его содержимое не позволялось бы:
    //file: index.php
  • ну, это понятно. я думал, может есть какой-то хитрый способ известный спецам:)
  • Все супер хитрые способы в документации к апачу :)
  • А вот вопрос "на встречу": как просмотреть содержимое папки, если в ней есть index.html?
  • Посмотреть его нельзя (если, конечно, у вас нет FTP доступа). Но получить файлы, которые в ней находятся - можно. Т.е. если в корне сайта лежат myfile.html и index.html, то запрос
    http://mysite.domen/
    вернет вам содержимое index.html, но на запрос
    http://mysite.domen/myfile.html
    вы получите myfile.html.
  • Доброе время суток!
    У меня вскрыли сайт. На сайте есть папка, доступ к которой надо закрыть. .Htaccess не работает.
    Вскрыли сайт таким образом - зашли в эту папку (к которой доступ закрыть надо), удалили один из файлов, и заменили его на файл с другим именем, в котором был вирус. По вашему совету, я разместил в этой папке index.html с переадресацией на главную страницу. Сможет ли хакер влезть еще раз в эту папку? Сайт ломают уже второй раз!
  • Приветствую!
    Зайти в папку на сервере просто так нельзя, независимо от того есть index.html или нет (этот файл к защите в общем-то отношения не имеет, он просто будет отображаться вместо списка файлов в папке). Для входа на сервер нужен либо FTP доступ, либо нужно найти дыру в скрипте, который может сохранять файлы на сервере.
    Например, если у вас есть скрипт, который используется для загрузок картинок на сервер и в нём не проверяется тип файла, то кто угодно сможет отправить вам в папку с картинками свой скрипт с вирусом.

    Поэтому вам сейчас нужно определить как именно взломали ваш сайт и закрыть дыру. К сожалению, простого способа это выяснить не существует. Я бы сразу сменил пароль на FTP и начал проверять скрипты. Если вы используете какой-то движок, то желательно его обновить и поискать в интернете сообщения о его уязвимостях.
  • Кстати, как насчёт того, что данная директива может не работать на некоторых версиях Apache даже при разрешении использования .htaccess
  • Как вариант, можно положить в папку index.html с каким-нибудь произвольным текстом, вроде "Доступ запрещен".
  • dark_angel, m4rr прав.
    Программы вроде телепорта находят только те страницы, на которые есть ссылки. И локальная версия сайта, которую они создают, в большинстве случаев вообще не соответствует структуре сайта на сервере.
    Например, эта страница называется kak-zapretit-prosmotr-soderzhimogo-papki-na-servere.html
    Если вы скачаете этот блог телепортом, то на вашем винчестере будет файл с таким названием. Но на сервере такого файла нет.
    Страница создается скриптом index.php (он подключает другие скрипты), а название страницы рассматривается просто как параметр.
    Используя его движок блога получает нужную информацию из базы данных.
  • Те страницы, куда ссылок нет, — не окажутся.
  • Те страницы, куда ссылок нет, не окажутся.
  • dark_angel
    берется софтина для скачивания всего сайта типа телепорта и вся эта защита отправляется лесом, все ваши "forbidden" страницы на жестком диске злоумышленника...
  • Так, а индексирование документов (гуглом, яндексом и пр.) при этом будет продолжаться?
  • Конечно будет.
    Запрещается индексирование файлов движка сайта, а не его страниц. Т.е. web сервер просто не будет возвращать список файлов в конкретной папке. Сами файлы будут доступны и любой поисковый робот их легко найдет, т.к. он использует ссылки на страницах.
    Если нужно дать указания роботу - используйте robots.txt
  • Директиву Options -Indexes нужно писать в корневом .htaccess? Это будет означать, что запрещено индексировать корневую папку?
  • Да. Кроме того, индексироваться не будут все вложенные папки.
blog comments powered by Disqus ]]>