ОБЗОРЫ

Осваивая безграничные просторы Интернета, нельзя не заметить множество различий в подходах к решению одних и тех же задач у нас и иностранцев. Безусловно, часть из этих различий основана на национальном менталитете, целесообразности и других причинах. Но некоторые из них вызваны недостатком знаний начинающих веб-мастеров: изучив основы HTML, Java, CGI или PHP, они пытаются исключительно с помощью этих инструментов решить все задачи сайтостроения, даже не подозревая, что существуют более простые и надежные пути.

Так, при необходимости авторизации посетителей начинающий веб-мастер спешит написать собственный скрипт и создать специальную веб-форму, хотя можно использовать встроенную функцию авторизации веб-сервера. Преимущества использования серверов Apache (которые поддерживают работу большинства отечественных и зарубежных сайтов) в данном случае очевидны: во-первых, это простота решения, во-вторых, гибкость настроек, и в-третьих, при тщательной конфигурации сайт можно сделать максимально защищенным, так как уровень защиты самого Apache считается одним из лучших в своем классе. Но самое главное достоинство подобного подхода сводится к тому, что ваш хостинг-пакет может вовсе не поддерживать работу с популярными сценарными языками (например, если вы пользуетесь ограниченным бесплатным хостингом) и вам даже не надо разбираться в особенностях создания скриптов - безопасность сайта и сохранность файлов обеспечит сам сервер.

Для того чтобы самостоятельно, без участия администратора, произвести настройки сервера существует так называемый файл гибкой настройки - .htaccess (.htaccess указывается всегда с точкой впереди, тем самым делается сообщение серверу о необходимости исполнения директив этого файла для произведения необходимых настроек. - Прим. авт.). Это - имя по умолчанию, в принципе он может называться как угодно, его название определяется параметром AccessFileName файла конфигурации доступа. С помощью .htaccess можно быстро переопределить многие настройки вашего сайта, описать кодировку файлов, организовать автоматическое перенаправление браузера на другую страницу, описать соответствия расширений и типов файлов, обработать ошибки обращения к серверу и многое другое. Файл .htaccess влияет (отменяя действие принятых по умолчанию настроек администратора хостинга) на файлы и папки того каталога, в котором установлен. При этом сам он недоступен пользователю из браузера и невидим владельцу сайта после загрузки его по протоколу ftp.

Работа сервера с .htaccess строится по принципу первичности обработки настроек: когда из браузера клиента поступает запрос в виде URL на считывание веб-страницы, сервер сначала анализирует директорию на наличие .htaccess-файла. Сервер ищет .htaccess в главной директории, а затем начинает спускаться по дереву директорий, пока не дойдет до той папки, где находится запрашиваемая страница. Когда сервер обнаруживает .htaccess-файл в какой-то папке, то в первую очередь начинает выполнять те указания (директивы), которые даны в нем, и только после этого выдает запрашиваемую страницу из этой директории.

В .htaccess можно выделить несколько основных групп переменных, используемых для настройки директив и управляющих:  авторизацией - AuthConfig (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require и т. д.);  видом документов - FileInfo (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority, и пр.);  индексацией директорий - Indexes (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName и др.).

Подробное описание каждой из переменных выходит за рамки данной статьи; тех, кто заинтересован в получении более полной информации по каждой из переменных настроек, я хочу переадресовать к руководству по Apache (www.apache.org).

Разграничение доступа

На этом мне хотелось бы закончить краткую теоретическую часть и перейти к более полезным практическим примерам. Но прежде хочу обратить ваше внимание на то, что для создания .htaccess-файла вам не потребуется каких-то специальных редакторов, вы с успехом можете воспользоваться стандартным "Блокнотом", входящим в пакет Windows, или любым другим текстовым редактором, поддерживающим работу с UNIX. Созданный файл необходимо сохранить как .htaccess (обязательно с точкой, без дополнительных названий и расширений).Файл .htaccess загружайте только в ту директорию, с которой он будет взаимодействовать или в которой находятся файлы, трубующие настройки.

Среди самых востребованных функций файла гибкой настройки наибольший интерес представляет ограничение доступа (парольная защита) к директории или файлу. Эта функция полезна как для коммерческих, так и для некоммерческих сайтов.

В общих чертах структура .htaccess-файла для управления доступом может выглядеть следующим образом: AuthUserFile puth/to/.htpasswd AuthName "Доступ к скрытой директории" AuthType Basic require valid-user ErrorDocument 401 "Вам отказано в доступе, обратитесь к администратору" Значение AuthUserFile определяет путь к файлу, содержащему логины и пароли доступа. Надо заметить, что следует указывать полный путь к .htpasswd от корня сервера (например, с:/virtual/ your-site.com/var/www/html/ .htpasswd). Если вы пользуетесь бесплатным хостингом, то вряд ли сможете узнать этот путь у администратора сервера, хотя, возможно, такие данные описаны где-то в разделе вопросов и ответов или в "подсказке". Всем же пользователям платного хостинга узнать путь у администратора не составит труда.

AuthType - задает тип авторизации для данной директории. Возможны значения Basic и Digest. Два этих типа авторизации отличаются степенью защиты. При использовании Basic (в основном для зоны Интернета) авторизация проходит без шифрования передаваемых данных, а в случае Digest вся информация шифруется по алгоритму MD5. Значение директивы AuthName выводится для посетителя в окне запроса пароля и может служить для пояснения запроса авторизации, предоставления кратких инструкций и т. п. Директива require valid-user разрешает доступ всем пользователям, указанным в файле .htpasswd. Вообще-то, директива require может настраиваться по-разному. Например, при значении: require user пользователь1 пользователь2 ... доступ к директории получают только указанные пользователи. В случае неудачного обращения к защищенной области сервер выдаст ошибку 401 (отказ в доступе).

Здесь вы можете указать текст, который будет отображаться в браузере, или создать специальный html-файл ошибки и переадресовать посетителя к этой странице. Наиболее очевидные ошибки, которые могут возникнуть: 403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided); 404 - запрашиваемый документ (файл, директория) не найден; 500 - внутренняя ошибка сервера (к примеру, ошибка в синтаксисе файла .htaccess). Для того чтобы пользователю при появлении ошибок выводилось задаваемое вами сообщение, в .htaccess пишем: ErrorDocument 401 error401.html ErrorDocument 403 error403.html ErrorDocument 404 error404.html ErrorDocument 500 error500.html Здесь errorXXX.html - любые названия файлов, соответствующих каждой из ошибок. Вы также можете использовать эти директивы и самостоятельно в .htaccess, если хотите создать только страницы ошибок (эта функция доступна на любом бесплатном или платном сервере).

Если же вам требуется защищенный доступ только к одному файлу (например, к zip-архиву или продаваемой программе), .htaccess будет выглядеть следующим образом: AuthName "Защищенный файл. Для скачивания введите пароль" AuthType Basic AuthUserFile puth/to/.htpasswd где ... - указание на конкретный файл. Таким же образом можно защитить субдиректории.

Как вы уже заметили, в обоих примерах есть ссылка на файл базы данных паролей - .htpasswd. В нем содержится информация о логинах и паролях пользователей, которым разрешен доступ к данной директории (файлу, группе файлов). В этом файле хранятся логин и зашифрованный пароль, разделенные между собой двоеточием (например, если и логин и пароль "тест", то в .htpasswd они будут выглядеть так: test: teH0wLIpW0gyQ).

Хотя .htpasswd - это обычный текстовый файл, для работы с ним есть специальная утилита (ее вариант для Unix называется htpasswd). Если по условиям хостинга доступ к ней на сервере вам запрещен, то не обойтись без специального скрипта, создающего пароли (PHP- и CGI-листинг можно скачать с www.biz-secrets.com/listing.zip), или утилиты, устанавливаемой на домашнем компьютере (www.biz-secrets.com/htpas.zip).

Существует еще один метод ограничения доступа. Он заключается в перечислении IP-адресов, которым запрещен или разрешен доступ. Делается это с помощью директив allow или deny. Например, в .htaccess можно указать: order deny, allow deny from all allow from 127.0.0.0 Данный пример построен на директиве deny (с английского - отказывать). Фраза "deny from all" запрещает доступ всем, кроме обозначенного (выражение allow from) адреса IP - 127.0.0.0 (ваш собственный компьютер). В этом случае все пользователи будут получать сообщение о запрете доступа "403 Forbidden", кроме пользователя с адресом 127.0.0.0, который сможет зайти в данный ресурс. Это весьма полезная возможность при отладке работы сайта, для просмотра своих трудов через браузер и т. п. Запретив доступ отовсюду, вы можете оставить его открытым только для себя и, возможно, еще для кого-нибудь из избранных.

Параметры allow from могут содержать выражения "all" или "ip" - адрес, часть доменного имени, часть IP-адреса с 1-го по 3-й байты, характеризующие, например, подсеть. Так, вместо allow from 127.0.0.0 можно указать allow from .your-site.com, тогда в защищенную директорию можно будет зайти только по ссылке с указанного URL. Этот очень ценный синтаксис как нельзя лучше подходит для коммерческих сайтов. В частности, если после приема денег через систему платежей WebMoney вы хотите отправить человека на специальную страницу своего сайта, где он сможет скачать программу или пароль, и при этом обезопасить страницу от случайных посещений и воровства ценных ресурсов, можно указать в .htaccess: allow from merchant.webmoney.ru. В таком случае страница будет доступна только тем, кто произвел оплату через WebMoney и кого сервер после оплаты перенаправил к вам на сайт.

Директива allow (с английского - позволять) действует с точностью до наоборот. Например, выражение: order allow, deny allow from all deny from 127.0.0.0 разрешит доступ всем, кроме посетителя с указанным IP. Эта функция не менее полезна. Она ограничивает доступ всякого рода нарушителей порядка, установленного на сайте, в форуме и т. п. Обратите внимание, что в отличие от предыдущего примера синтаксис начинается с фразы "order allow, deny", которая буквально означает "сначала разрешить, потом запретить". В этом случае пользователю 127.0.0.0 строкой allow from all сначала разрешится доступ, а потом будет запрещен следующей строкой. Если же вы укажете order deny, allow, как в предыдущем случае, то пользователь получит доступ, запретить который уже будет нельзя, и он спокойно пройдет внутрь, нравится вам это или нет.

Полезные возможности

Среди других не менее полезных возможностей файла гибкой настройки следует упомянуть и индивидуальное перенаправление (redirect), позволяющее настроить показ разных страниц посетителям с разными IP. Например, можно организовать перенаправление посетителя с IP-адресом 127.0.0.0 на специально разработанную для него страницу mypage. html:SetEnvIf REMOTE_ADDR 127.0.0.0 REDIR= "redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /mypage.html Также можно перенаправить посетителя при запросе определенных страниц. Эта функция более чем полезна при организации защиты от сетевых вирусов и сканеров. Так, если кто-то попытается запросить папку scripts на вашем сайте, благодаря специальной директиве его отошлют на сайт Microsoft: redirect /scripts http://www.microsoft.com.

Иногда возникает необходимость сокрытия адресов страниц, тогда надо положить в каталог с вашим проектом файл .htaccess, указав в нем лишь одну директиву Options-Indexes. В этом случае при посещении любой из страниц сайта (или директории) в браузере будет отображаться только адрес главной страницы. Существует еще директива IndexIgnore, которая позволяет управлять выводом содержимого каталога, когда index.html или заменяющий его файл не найден. По умолчанию Apache выдаст содержимое каталога, но некоторые веб-мастера пытаются скрыть его от посторонних глаз. Чтобы сделать это, надо в .htaccess указать: IndexIgnore *.

Вообще-то Apache предоставляет много различных возможностей для работы с Index’ами. DirectoryIndex отвечает за переопределение файла по умолчанию (индексный или загрузочный файл). Данная директива задает имя первого файла, который будет открываться при обращении к вашему веб-серверу. Чаще всего такой файл называется index.html. Однако иногда требуется задать другой начальный файл. К примеру, если у вас динамический контент, то это может быть файл index.php, index.shtml или даже что-то типа something.php и hello_world.phtml. Если надо, можно указать несколько таких файлов, разделяя их пробелом: DirectoryIndex index.php something.shtml /cgi-bin/file.cgi. В этом случае сервер будет искать среди указанных названий имеющийся файл. Если сервер не нашел index.php, то запустит something.shtml, если не найдет и его, то обратится к /cgi-bin/file.cgi.Надеюсь, в данной статье я смог раскрыть некоторые тайны использования файла гибкой настройки. Это лишь небольшая часть возможностей, предоставляемых каждому веб-мастеру сервером Unix. Всем, кто заинтересован в том, чтобы узнать о .htaccess больше, я рекомендую обратиться к руководству по Apache или найти ответы на свои вопросы на многочисленных сайтах, посвященных этому вопросу.

С автором можно связаться по адресу: viacheslavb@ua.fm.