СЕРГЕЙ ЯРЕМЧУК, фрилансер. Автор более 800 статей и шести книг. С «СА» с первого номера. Интересы: сетевые технологии, защита информации, свободные ОС
Как управлять индексированием своего сайта
Современные поисковые машины являются мощным инструментом, но с их помощью можно получить информацию, которую администратор предпочел бы не выставлять на всеобщее обозрение. Используя методы, позволяющие указать поисковым роботам на те части сайта, которые действительно нуждаются в индексации, можно избежать ряда проблем.
Согласно статистике, как минимум половина пользователей каждый день пользуются услугами поисковиков. И вполне естественно, что, желая с максимальной точностью удовлетворить запрос пользователя, разработчики постоянно совершенствуют алгоритмы работы своих поисковых роботов. Это привело к тому, что сегодня при помощи определенных запросов можно получить информацию, которую веб-мастер предпочел бы скрыть. Здесь и страницы сайта, позволяющие обойти обязательный вход по паролю или позволяющие любому пользователю беспрепятственно создать свой почтовый ящик на закрытом корпоративном сервере. Не говоря уже о доступе к конфиденциальным данным и программам, а также к различным устройствам (принтерам, веб-камерам и пр.). Взлом при помощи поисковых сервисов давно пользуется большой популярностью и к тому же не требует серьезной подготовки нападающего. Конечно, он имеет определенный элемент вероятности, но кто знает, вполне возможно, что вскоре именно ваш сайт окажется в выданном списке под номером один. Но самое интересное, что уже давно разработаны методы, которые позволяют указать поисковым машинам на страницы или места сайта, которые не нуждаются в индексации. Это мета-теги и файл robots.txt, и если робот или сканер работает по правилам, то технологические страницы сайта не попадут под индексацию. Если о первом начинающим веб-мастерам еще говорят на курсах и пишут в книгах, то наличие второго сохраняется в тайне. Поэтому увидев в журнале веб-сервера запись о том, что запрашивался отсутствующий файл robots.txt (“GET /robots.txt HTTP/1.0” 404), администратор в панике бросается за советом на форумы. Сегодня этот файл используют приблизительно 5-6% сайтов. В остальных он либо совсем отсутствует, либо имеется, но с пустыми параметрами. Хотя вполне вероятно, большинству сайтов действительно нет нужды в ограничениии доступа, но на серьезных проектах такой возможностью пренебрегать просто опасно. После того как робот пройдется по каталогу cgi-bin, точно можно ждать гостей. Но обо всем по порядку.
Назначение Robots Exclusion Protocol
Впервые вопрос о разработке механизмов, позволяющих ограничить доступ роботам к различным страницам сайта, возник приблизительно в 1993-1994-м, когда появились первые сообщения об утечке информации. Robots Exclusion Protocol разработан в 1994м Мартином Костером (Martijn Koster) и представляет собой стандартный протокол, который сегодня соблюдает большинство сканеров. Он содержит правила (Robot Rules) исключений для различных роботов индексации, поиска или зеркалирования веб-серверов. И как результат позволяет удалить из индекса весь сервер, каталог, отдельный документ, либо файлы с определенным расширением. Располагается такой файл в корне веб-сервера, т.е. набрав, например, адрес http://www.foo.com/robots.txt, вы должны его получить. Размещать же его в других каталогах бессмысленно, поскольку учитываться роботом он не будет, как, например, http://www.foo.com/admin/robots.txt. Но для каждого порта http/https должен быть создан отдельный файл. Робот, а также многие утилиты, позволяющие скачать весь сайт целиком, первым делом пытаются считать этот файл. Получив положительный ответ (2хх), производится грамматический разбор файла и в дальнейшем при работе применяются ограничения применительно к этому роботу. Если ответ сервера указывает, что ресурс не существует (код статуса 404), то робот продолжает работать без каких-либо ограничений. Поведение роботов при получении ответов, отличных от описанных выше, рекомендовано в [2]. Если ответом сервера является код 401/403 (нет прав/доступ запрещен), указывающий на ограничение доступа, то робот должен считать, что пытается получить доступ к полностью закрытому сайту, и прекратить работу. Когда приходит ответ, говорящий о недоступности ресурса, робот откладывает визит до восстановления работоспособности сайта. При получении ответа, указывающего на переадресацию (3хх), робот должен следовать за ссылками до обнаружения ресурса. Но этих рекомендаций роботы могут не придерживаться. Так Google-бот не интерпретирует ответ 401/403 на обращение к файлу robots.txt, как запрет на сканирование страниц сайта. К сожалению, на сегодня еще много до конца так и не решено. Во-первых, робот его может просто проигнорировать. Не до конца ясен вопрос с кешированием файла. Если веб-мастер часто изменяет его содержание, робот может использовать раннюю версию. Пока стараются придерживаться 24-часового интервала кеширования, хотя некоторые роботы проверяют дату или размер и в случае несоответствия считывают файл заново. Кроме того, некоторые веб-мастера увлекаются составлением параметров, пренебрегая общими каталогами и регулярными выражениями, что приводит к увеличению размера файла. Как поведет себя робот в этом случае, сказать трудно, в общем случае файл кешируется частично или не кешируется вообще.
Также стоит помнить, что файл robots.txt не гарантирует абсолютной безопасности веб-сайта. Злоумышленник с его помощью может получить информацию об областях сайта, которые веб-мастер пытается скрыть, а спамерский робот может просто его проигнорировать. Но в случае «персонального» интереса к определенному сайту будут перебираться все варианты, а применение robots.txt по крайней мере не приведет на ваш сайт случайных гостей.
Формат файла robots.txt
Стандарт, в котором описано содержимое файла, можно найти в [1]. В данном документе отмечено, что, используя этот файл, можно также указывать для индексации конкретному роботу специально оптимизированные под него веб-страницы, а это может привести к некоторому увеличению посещаемости ресурса. Это обычный текстовый файл в LDIF-формате, состоит из параметров и значений, разделенных между собой двоеточием. Записи не чувствительны к регистру. По одному параметру в строке. Знак «#» означает комментарий и строка далее игнорируется. Параметр User-agent указывает на специфическое имя, которое имеет любая программа-клиент, предназначенная для доступа к веб-данным. Возможна запись нескольких robot-id в одном поле, в качестве разделителя в этом случае используется пробел или табуляция. Данный параметр будет учитываться только программами роботами, для веб-браузеров установить таким образом ограничения не получится. Список всех robot-id можно получить в [5]. Например, правило для Google будет начинаться так:
User-agent: googlebot
(или Googlebot для лучшей читаемости).
Робот, найдя правило, совпадающее с его именем, будет действовать согласно установленным специально для него ограничениям, если таковые имеются. Не найдя индивидуального правила, робот решит, что для него ограничения не установлены. Если необходимо указать правила, действующие для всех роботов, используется знак звездочка – «*».
Но если поисковый робот обнаружит в файле /robots.txt несколько записей, совпадающих с его значением robot-id, то робот может выбрать любую из них. После прописываются ограничения с применением конструкций Disallow/Allow, пустой параметр означает отсутствие ограничений. Возможно задание двух значений в поле Disallow/Allow, но это не рекомендуется, так как в будущих спецификациях это может быть изменено. Например:
User-agent: fast
Allow: /info/
User-agent: googlebot aspider
Disallow: /images/
Disallow: /cgi-bin/ /1251/
Disallow: /changelog.html
User-agent: *
Disallow:
При задании имени необходимо учитывать, что можно использовать как частичную, так и полную ссылку.
Например, /changelog позволит исключить из индексации не только файл changelog.html и подкаталог changelog со всем содержимым, но все файлы и каталоги, имена которых начинаются с changelog.
А параметр /changelog/ затронет только подкаталог changelog. Отсюда если будет задана маска /t, то из поиска будет исключено все, что начинается с буквы t. Для удобства можно использовать регулярные выражения.
Например, чтобы исключить из индексации все рисунки, используем:
Disallow: *.gif$
Динамически генерируемые страницы убираются так:
Disallow: /*?
Использование мета-тегов
Другим более удобным при работе с отдельными страницами стандартом является использование тега <META>. С его помощью можно также указать роботам на то, что индексировать страницу не надо. Для этого в раздел <HEAD> добавьте следующую строку:
Disallo<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">w: *.gif$
Если необходимо указать то же только роботу Google, можно написать так:
<META NAME="GOOGLEBOT" CONTENT="NONE">
Работающие по стандарту поисковые сервера, должны исключить данную страницу из своих баз, кроме того, робот не будет следовать за внешними ссылками.
Можно также указать роботу, что документ генерируется динамически. В этом случае он не будет его индексировать.
<META NAME="DOCUMENT-STATE" CONTENT="DYNAMIC">
В этом случае бывает полезно указать, что индексировать необходимо другой документ.
<META NAME="URL" CONTENT="/help.html">
Утилита-помощник
В общем случае такой файл создать очень просто. Но в сильно разветвленных сайтах, оптимизированных под особенности различных поисковых машин, при его составлении легко запутаться, особенно если у веб-мастера таких сайтов много. Поэтому были разработаны утилиты, позволяющие быстро и без усилий проделать эту работу. Так, RoboGen [8] представляет собой визуальный редактор доступный под все версии Windows, позволяющий управлять доступом к файлам и каталогам на нескольких серверах. Поддерживает загрузку по ftp, знает о 180 пользовательских агентах (user-agents) (рис. 1) и 10 основных типов поисковых движков. При необходимости пользователь может самостоятельно добавлять новую информацию в базу данных пользовательских агентов и движков.
Рисунок 1. Утилита RoboGen «знает» о 180 пользовательских агентах
На сайте проекта доступны две версии Standard и Limited Edition (последняя freeware), сравнение основных возможностей которых приведено в RoboGen Comparison Chart http://www.rietta.com/robogen/comparison.shtml. Кроме того, отдельно доступна утилита RoboTag 1.5 (http://www.rietta.com/downloads/robogen/RoboTag.zip), входящая в поставку RoboGen SE и LE. При ее помощи можно создавать мета-теги для вставки в html-файлы (рис. 2).
Рисунок 2. Утилита RoboTag позволяет сгенерировать мета-теги для вставки в html-файл
Усиленная блокировка с Robotcop
Не менее интересными возможностями обладает Robotcop [9], представляющий собой модуль к веб-серверу Apache, написанный на С и распространяемый в исходных кодах. Он отслеживает правильность работы поисковых роботов, если робот не подчиняется указанным для него правилам, то Robotcop принудительно его ограничивает, блокируя на некоторое время клиентский IP. Кроме того, веб-мастер может создавать каталоги-ловушки. Если робот попытается прочитать такой каталог, то его запросы также будут перехватываться. Модуль также может среагировать и соответственно блокировать роботов, охотящихся за почтовыми адресами. Имеет настраиваемый список известных спамерских роботов. К сожалению, последняя версия 0.6, датированная 3 ноября 2002 года, поддерживает только Apache 1.3. Порт для второй версии Apache и для IIS, к сожалению, так и не состоялся. Это, наверное, беда многих хороших OpenSource-проектов.
Остальную информацию вы можете найти в документации. Успехов.
Ссылки:
- Описание протокола robots.txt – http://www.robotstxt.org/wc/robots.html, http://info.webcrawler.com/mak/projects/robots/norobots.html.
- A Method for Robots Control – http://www.robotstxt.org/wc/norobots-rfc.html.
- Robot Exclusion Standard Revisited – http://www.kollar.com/robots.html.
- ЧАВО по веб-роботам – http://info.webcrawler.com/mak/projects/robots/faq.html.
- Расширенный список всех роботов – http://info.webcrawler.com/mak/projects/robots/active/all.txt.
- Информация Google для веб-мастеров по удалению своего сайта из поисковой машины – http://www.google.com/webmasters/remove.html.
- Who’s Knocking on the Door? – http://country-art.com/class/robotstxt.htm.
- Сайт проекта RoboGen – http://www.rietta.com/robogen/index.shtml.
- Сайт проекта Robotcop – http://www.robotcop.org.