Украшения. Аксессуары. Дизайн ногтей. Цвета. Нанесение. Ногти

Афиширование inurl c board cgi cmd. «Индия дешевый сиалис inurl read cgi board

Клиент может запросить у веб-сервера как документ-файл с диска, так и документ, динамически формируемый некоторой внешней программой (как правило - в зависимости от данных, предоставленных пользователем при заполнении формы). Интерфейс CGI представляет собой спецификацию взаимодействия веб-сервера и внешней программы, которую веб-сервер запускает для обработки запроса. (Внешняя программа, вне зависимости от своей природы, часто называется CGI-скриптом.)

CGI определяет каким образом данные, предоставленные клиентом в запросе, передаются программе, как программа возвращает сгенерированный HTML-контент серверу, и какие переменные окружения устанавливаются сервером при запуске программы. Переменные окружения несут дополнительную информацию о сервере и запросе (например, тип сервера, IP-адрес клиента и др.).

Данные из заполненной клиентом HTML-формы могут передаваться на сервер двумя методами: GET и POST, это определяется параметром method соответствующего тэга <form method=... action=... >. В первом случае (GET) данные присоединяются после вопросительного знака в конец URL, указанной в параметре action , во втором случае - передаются в теле запроса - в секции, предназначенной для данных (следует после всех заголовокв и пустой строки). В обоих случаях данные кодируются одинаково - см. след. пункт.

При вызове CGI-программы все, что поступило в теле запроса, подается программе на стандартный ввод, а все, что находится в URL после вопросительного знака, помещается в переменную окружения QUERY_STRING. Веб-сервером данные запроса никак не интерпретируются и не преобразуются, эти задачи возложены на CGI-программу.

CGI-программа выдает содержимое ответа (как правило, HTML-контент) на свой стандартный вывод, который перехватывается веб-сервером с тем, чтобы отослать эти данные клиенту. Предварительно CGI-программа должна напечатать заголовок "Content-Type" и отделить его от данных пустой строкой. Например, вывод CGI-программы, генерирующей HTML, может выглядеть следующим образом:

Content-Type: text/html

Hello, world

Конфигурирование сервера Apache для исполнения CGI-скриптов

Для того, чтобы Apache воспринимал все файлы, находящиеся в некотором каталоге как CGI-скрипты, нужно использовать директиву

ScriptAlias /виртуальный/путь / /путь/к/каталогу / ScriptAlias /cgi-bin/ /usr/local/www/cgi-bin/ Это означает, что для обработки запроса URL вида http://your.server.com/cgi-bin/dir/script будет взят не файл script из каталога DocumentRoot /cgi-bin/dir/, а запущена программа /usr/local/www/cgi-bin/dir/script.

Для смешанного хранения файлов, подлежащих просмотру, и CGI-скриптов в одном каталоге внутри дерева DocumentRoot следует присвоить CGI-скриптам одинаковые расширения (например, ".cgi") и указать серверу, что интерпретировать такие файлы следует как CGI-скрипты:

AddHandler cgi-script .cgi Директива AddHandler может быть использована в любом контексте конфигурации Apache.

Структура URL и кодирование данных запроса

Для работы CGI-программ важное значение имеют части URL, называемые PATH_INFO и QUERY_STRING. Рассмотрим запрос с URL вида

Http://my.server.com/cgi-bin/dir/prog/a/b?A=1&B=qwerty

Используя директиву ScriptAlias , приведенную в предыдущем пункте, сервер определяет что произошло обращение к CGI-программе и для поиска этой программы заменяет начальное /cgi-bin/ на /usr/local/www/cgi-bin/ . Следуя запрошенному URL, сервер обнаруживает в этом каталоге подкаталог dir , однако подкаталога prog в каталоге /usr/local/www/cgi-bin/dir не обнаружено. В таком случае сервер предполагает, что prog - имя CGI-программы, подлежащей выполнению. Если программа /usr/local/www/cgi-bin/dir/prog не найдена или не может быть исполнена, сервер возвращает клиенту ошибку 403, 404 или 500. В противном случае программа prog запускается, а оставшаяся часть пути из URL - /a/b - передается программе prog в переменной окружения PATH_INFO. Таким способом можно передать в CGI-программу дополнительные параметры.

Все, что находится после вопросительного знака - A=1&B=qwerty - передается программе prog в переменной окружения QUERY_STRING. Это могут быть данные из заполненной пользователем формы, отправленные на сервер методом GET, либо какая-то другая информация (сервер не делает никаких предположений об интерпретации данных в QUERY_STRING, это задача вызываемой программы).

Данные из полей формы, заполненной пользователем - независимо от метода (POST или GET), которым они пересылаются на сервер - кодируются следующим образом:

имя_поля =значение_поля &имя_поля =значение_поля...

Пары имя-значение разделяются амперсандом. Алфавитно-цифровые символы и некоторые знаки препинания, не имеющие специального значения (тире, подчеркивание) передаются как есть. Остальные символы кодируются в виде "%NM ", где NM - двузначный шестнадцатеричный код символа. Пробел может передаваться как "%20" или как символ "+". Кириллические символы также должны кодироваться указанным способом. Кодировка производится броузером при отправке полей заполненной формы.

Например:

Http://my.server.com/cgi-bin/dir/prog?birthday=11%2F05%2F73&name=John+Smith означает, что в поле birthday пользователь внес "11/05/73", а в поле name - "John Smith".

Декодирование данных формы является задачей CGI-программы.

При пересылке данных формы, закодированных вышеописанным способом, методом POST клиент должен установить заголовок запроса Content-Type следующим образом:

Content-Type: application/x-www-form-urlencoded

Переменные окружения CGI

При запуске CGI-скрипта веб-сервер устанавливает дополнительные переменные окружения:

Переменная Значение
AUTH_TYPE

Метод аутентифицирования, использованный для опознания пользователя. См. также REMOTE_USER и REMOTE_IDENT.

CONTENT_LENGTH

Длина данных запроса в байтах, переданных CGI-скрипту через стандартный ввод.

CONTENT_TYPE

MIME-тип данных запроса.

DOCUMENT_ROOT

Корневой каталог дерева документов веб-сервера (определяется директивой DocumentRoot ).

GATEWAY_INTERFACE

Используемая версия CGI.

HTTP_ACCEPT

Список MIME-типов данных, которые клиент может принять.

HTTP_FROM

Адрес электронной почты пользователя, сделавшего запрос (многие броузеры не передают такие данные).

HTTP_REFERER
HTTP_USER_AGENT

Броузер клиента.

PATH_INFO PATH_INFO (если есть) - см. выше " "
PATH_TRANSLATED

PATH_INFO, преобразованное в полный путь в файловой системе сервера (PATH_INFO, добавленное к DOCUMENT_ROOT).

QUERY_STRING

Данные запроса, переданные в составе URL вслед за вопросительным знаком - см. выше " ".

REMOTE_ADDR

IP-адрес клиента.

REMOTE_HOST Имя DNS клиента.
REMOTE_USER Аутентифицированное имя пользователя.
REQUEST_METHOD

Метод запроса (GET, POST, HEAD и т.д.).

SCRIPT_NAME Виртуальный путь (например, /cgi-bin/program.pl) к исполняемому CGI-скрипту.
SERVER_NAME DNS-имя сервера или, при невозможности определить имя, его IP-адрес.
SERVER_PORT

Номер порта сервера.

SERVER_PROTOCOL Имя и версия протокола, через который был сделан запрос (например, HTTP/1.1).
SERVER_SOFTWARE

Тип и номер версии ПО веб-сервера.

С Apache поставляется стандартный тестовый скрипт test-cgi, выводящий занчения переменных окружения CGI.

Cookies и другие методы сохранения состояния

Основной проблемой при написании интерактивных CGI-скриптов, т.е. скриптов, чьи последовательные вызовы одним пользователем логически связаны друг с другом, является проблема сохранения состояния. Дело в том, что в протокол HTTP рассматривает все поступающие на сервер запросы как независимые друг от друга. Соответственно, после обработки каждого вновь поступившего запроса CGI-скрипт полностью завершает свою работу, а для обработки следующего запроса, неважно относится ли он к тому же логическому сеансу работы пользователя или нет, скрипт начинает свою работу с нуля без всякой информации о предыстории.

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

Существует несколько методов сохранения состояния:

  1. cookies - сохранение на компьютере клиента,
  2. скрытые поля - сохранение внутри формы, посылаемой клиенту,
  3. сохранение в файле какого-либо формата на сервере,
  4. сохранение в параллельно работающей базе данных.

Два последних метода реализуют сохранение состояния на стороне сервера.

База данных

В качестве параллельно работающей базы данных может выступать любая из имеющихся СУБД, для обращения к которой язык программирования скрипта имеет интерфейс (в Перле есть библиотеки, обеспечивающие взаимодействие со всеми распространенными СУБД).

Также существует решение в виде демона, который запускается параллельно с http-сервером, и сохраняет требуемую информацию в своей оперативной памяти в виде переменная =значение . Для записи или извлечения данных скрипт соединяется с демоном по заранее оговоренному порту TCP или UDP, идентифицирует себя и использует набор простых команд типа "save name =value " и "extract name " (возвращается value ).

Интересно, что несмотря на сложность реализации, такое решение (или использование СУБД с возможностью доступа по сети) позволяет разделять данные между скриптами работающими на различных серверах (если реализуется какая-то сложная распределенная интерактивная веб-система), при этом не вовлекается сохранение данных на стороне пользователя.

Файл

Основным недостатком сохранения данных в файле, кроме использования дискового пространства и накладных расходов на файловые операции, является операция записи на диск как таковая. Запись на диск может быть источником серьезных проблем в плане безопасности, так как работа CGI-скрипта фактически управляется воздействием внешних пользователей, которые могут иметь враждебные намерения. Путем посылки каких-либо специальных данных неаккуратно написанному скрипту можно вызвать серьезный сбой в работе сервера. Если же скрипт имеет право записи на диск, то последствия могут быть гораздо серьезнее, поэтому обычно CGI-скрипты, как и сам веб-сервер, работают с минимальными привилегиями от имени пользователя nobody без права записи на диск.

Сохранение состояния на стороне пользователя

Сохранение данных состояния на стороне пользователя (cookies и, технически, скрытые поля) существенный недостаток: пользователь имеет полный доступ к сохраняемым данным и может их несанкционированно изменить (например, прочитать правильный ответ теста или изменить идентификатор пользователя). Достоинством является простая реализация.

Cookies

Cookies - это данные вида имя =значение , которые, будучи получены от сервера, сохраняются броузером на диске пользователя для их возврата серверу при последующих запросах к этому или другому URL. Поскольку данные сохраняются на диске, они могут быть использованы после перезапуска броузера.

Сервер передает cookie через специальное поле заголовка HTTP-ответа "Set-Cookie". Броузер возвращает cookie также через специальное поле в загловке HTTP-запроса - "Cookie". На стороне сервера cookie формируется, как правило, скриптом, который просто выводит в STDOUT соответствующий заголовок. Передача данных, полученных через cookie, от броузера в скрипт производится сервером через установку переменной окружения HTTP_COOKIE, которая доступна внутри скрипта и содержит пары имя =значение , которые броузер передал внутри поля "Cookie" в заголовке своего запроса.

Формат поля Set-Cookie (HTTP-ответ)

Set-Cookie: имя =значение ; Max-Age=секунды ; Comment=текстовый_комментарий ; Path=URI_или_часть_URI ; Domain=домен_сервера ; Secure ; Version=1

Все элементы, кроме имя =значение и Version, не являются обязательными. В заголовке одного ответа сервера может содержаться несколько полей Set-Cookie.

имя =значение информация, предназначенная для сохранения на стороне клиента и последующего возврата серверу; ни в имени , ни в значении не могут содержаться символы пробела, табуляции или точки с запятой; при необходимости такие символы должны быть закодированы в соответствии с общими правилами кодирования URL.

Max-Age=секунды устанавливает срок годности данных (в секундах с момента получения cookie); по умолчанию - до окончания работы данного проуесса броузера.

Comment=текстовый_комментарий комментарий сервера по поводу предназначения cookie; предполагается, что пользователь может отказаться работать с этим cookie, если комментарий ему не понравится.

Domain=домен_сервера домен, для которого действительно данное cookie (броузер должен возвращать cookie при обращении ко всем серверам данного домена, с учетом параметра Path [см. ниже]); домен должен начинаться с точки; данный сервер должен находиться в этом домене. Если параметр Domain не указан - возвращать cookie только данному серверу.

Path=URI_или_часть_URI путь от корня дерева документов сервера (URI); броузер должен возвращать cookie при обращении к данному URI и ко всем URI, начинающимся с данного; по умолчанию - URI, при запросе которого было сгенерировано cookie, минус имя файла.

Пример: при обращении на "http://s.vvsu.ru/a/b/c" сервер выдал ответ с установленным полем в заголовке:

SetCookie: X=5; Version=1 Это значит, что cookie должно возвращаться броузером при обращении на все URL вида "http://s.vvsu.ru/a/b/какое-то_имя_файла ".
Если же SetCookie в ответе сервера выглядит вот так: SetCookie: X=5; Domain=.vvsu.ru; Path=/a/; Version=1 то броузер должен присоединять это cookie ко всем запросам URL вида: "http://имя_без_точки .vvsu.ru/a/b/некий_путь_или_никакого ".

Secure если это параметр присутствует, то броузер должен возвращать cookie серверу только через защищенный канал связи; стандарт не специфицирует конкретный механизм защиты данных при передаче, но предполагается, что это SSL.

Формат поля Cookie (HTTP-запрос)

Cookie: имя =значение ; Path=URI_или_часть_URI ; Domain=домен_сервера ; Version=1

Параметры Path и Domain включаются только если они были установлены в заголовке Set-Cookie. Если несколько cookie удовлетворяют параметру Path, то они указываются в одном заголовке Cookie друг за другом (через точку с запятой) в следующем порядке: первыми передаются cookie с более длинным параметром Path. Порядок следования при равенстве параметров Path не определяется.

Скрытые поля

Скрытое поле создается внутри формы с помощью тега
name1 value=value1 >

Когда броузер получает документ с этой формой, содержимое полей типа "hidden" не отображается и пользователь не знает об их существовании (если только не посмотрит в HTML-текст присланного документа). После того, как пользователь отправляет форму на сервер, пара "name1=value1 " присоединяется к данным формы, которые будут обработаны вновь запущенным скриптом. Таким образом скрипт может получить данные о предыстории своей работы с пользователем. Например, при электронном шоппинге в скрытых полях может сожержаться список товаров, выбранных для покупки в других отделах, которые пользователь уже посетил в данном сеансе работы.

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

Server Side Includes

SSI представляет собой механизм разбора HTML-документов на стороне сервера с целью обнаружения в документе и выполнения директив, добавляющих в документ дополнительную информацию.

Все директивы вставляются внутрь тэгов HTML-комментариев, что позволяет клиенту, в случае, если сервер не поддерживает SSI, игнорировать эти директивы. Директивы имеют следующий формат:

Ниже следует список основных директив SSI и их параметров.

echo Подставляет в документ значение указанной в качестве параметра переменной окружения (см. также список CGI-переменных) или специальной переменной SSI (см. ):

Вы пришли на сервер, находящийся по адресу ...

include Вставляет в документ текст другого файла. Параметры: file - указывает путь к вставляемому файлу относительно расположения данного документа; virtual - указывает виртуальный путь (как он указывался бы в URL) к вставляемому файлу.

Эта директива очень удобна для создания стандартных шапок и подвалов веб-страниц.

fsize Вставляет размер указанного в параметре файла (путь к файлу виртуальный):

Размер файла archive.zip - bytes.

flastmod Вставляет в документ дату и время последней модификации указанного в параметре файла (путь к файлу виртуальный):

Дата последнего изменения: bytes. Формат вывода даты и времени может быть специфицирован параметром timefmt директивы config .

exec Выполняет внешнюю программу, указанную параметром, и вставляет вывод этой программы в документ. Параметры: cmd - выполняемая программа является неким обычным приложением; cgi - выполняемая программа является CGI-скриптом

На эту страницу заходили раз. В первом примере используется подстановка значений переменных окружения (см. CGI-переменные).

config Модифицирует различные аспекты работы SSI. Параметры:

  • errmsg - сообщение об ошибке, выдаваемое при невозможности выполнить директиву:
  • sizefmt - устанавливает формат вывода размера файла (подставляемого директивой fsize ; значения: bytes - выводит в байтах; abbrev - округляет до целого числа килобайт. Размер файла archive.zip - примерно bytes.
  • timefmt - устанавливает формат вывода даты и времени, подробнее см. .

Специальные переменные SSI

Ниже приведены переменные SSI, которые можно использовать в директиве echo в дополнение к переменным CGI.

DOCUMENT_NAME Имя данного документа. Например:

Вы читаете файл под названием:

DOCUMENT_URL Виртуальный путь к данному документу. Например:

QUERY_STRING_UNESCAPED Декодированные данные из QUERY_STRING (см " "), при этом все метасимволы шелла экранированы обратным слэшем (\).

DATE_LOCAL Текущие дата и время по местному времени. Например:

Сейчас

DATE_GMT Текущие дата и время по Гринвичу.

LAST_MODIFIED
Дата и время последней модификации данного документа. Например:

Этот файл был последний раз изменен

Задание

Написать CGI-скрипт для игры в виселицу (угадывание слова по буквам).

Правила игры

Сервер загадывает слово из словаря и показывает его пользователю в замаскированном виде (буквы заменены звездочками). Пользователь имеет некоторое число попыток; во время каждой попытки он может угадать одну букву. Если пользователь правильно угадывает букву или называет букву, которую он уже использовал, попытка не засчитывается. Иначе число попыток уменьшается на единицу.

Если пользователь правильно угадывает букву, сервер демаскирует в отображении слова все вхождения угаданной буквы. В любом случае сервер добавляет предложенную пользователем букву в список использованных букв, который демонстрируется во время каждой попытки для удобства пользователя. Также демонстрируется число оставшихся попыток.

Игра прекращается, если число попыток стало равным нулю (пользователь проиграл) или если угаданы все буквы в слове (пользователь выиграл).

Если пользователь на какой-либо попытке предлагает более одной буквы, считается, что пользователь пытается угадать слово целиком. При верной догадке пользователь выигрывает, иначе проигрывает независимо от числа оставшихся попыток.

Реализация

Слова выбираются случайным образом из заданного текстового файла.

Соотношение числа попыток и длины слова разумно определяется программистом. Например, число попыток есть заданная функция от длины слова; число попыток жестко привязано к каждому слову в словаре; длина слов в словаре и число попыток являются константами; при определении числа попыток используется заявленный пользователем уровень сложности.

При первом обращении к скрипту выдается заставка и регистрационная форма вида.

Взлом при помощи Google

Alexander Antipov

Поисковая система Google (www.google.com) предоставляет множество возможностей для поиска. Все эти возможности – неоценимый инструмент поиска для пользователя впервые попавшего в Интернет и в то же время еще более мощное оружие вторжения и разрушения в руках людей с злыми намерениями, включая не только хакеров, но и некомпьютерных преступников и даже террористов.
(9475 просмотров за 1 неделю)


Денис Батранков
denisNOSPAMixi.ru

Внимание: Эта статья не руководство к действию. Эта статья написана для Вас, администраторы WEB серверов, чтобы у Вас пропало ложное ощущение, что Вы в безопасности, и Вы, наконец, поняли коварность этого метода получения информации и взялись за защиту своего сайта.

Введение

Я, например, за 0.14 секунд нашел 1670 страниц!

2. Введем другую строку, например:

inurl:"auth_user_file.txt"

немного меньше, но этого уже достаточно для свободного скачивания и для подбора паролей (при помощи того же John The Ripper). Ниже я приведу еще ряд примеров.

Итак, Вам надо осознать, что поисковая машина Google посетила большинство из сайтов Интернет и сохранила в кэше информацию, содержащуюся на них. Эта кэшированная информация позволяет получить информацию о сайте и о содержимом сайта без прямого подключения к сайту, лишь копаясь в той информации, которая хранится внутри Google. Причем, если информация на сайте уже недоступна, то информация в кэше еще, возможно, сохранилась. Все что нужно для этого метода: знать некоторые ключевые слова Google. Этот технический прием называется Google Hacking.

Впервые информация о Google Hacking появилась на рассылке Bugtruck еще 3 года назад. В 2001 году эта тема была поднята одним французским студентом. Вот ссылка на это письмо http://www.cotse.com/mailing-lists/bugtraq/2001/Nov/0129.html . В нем приведены первые примеры таких запросов:

1) Index of /admin
2) Index of /password
3) Index of /mail
4) Index of / +banques +filetype:xls (for france...)
5) Index of / +passwd
6) Index of / password.txt

Нашумела эта тема в англо-читающей части Интернета совершенно недавно: после статьи Johnny Long вышедшей 7 мая 2004 года. Для более полного изучения Google Hacking советую зайти на сайт этого автора http://johnny.ihackstuff.com . В этой статье я лишь хочу ввести вас в курс дела.

Кем это может быть использовано:
- Журналисты, шпионы и все те люди, кто любит совать нос не в свои дела, могут использовать это для поиска компромата.
- Хакеры, разыскивающие подходящие цели для взлома.

Как работает Google.

Для продолжения разговора напомню некоторые из ключевых слов, используемых в запросах Google.

Поиск при помощи знака +

Google исключает из поиска неважные, по его мнению, слова. Например вопросительные слова, предлоги и артикли в английском языке: например are, of, where. В русском языке Google, похоже, все слова считает важными. Если слово исключается из поиска, то Google пишет об этом. Чтобы Google начал искать страницы с этими словами перед ними нужно добавить знак + без пробела перед словом. Например:

ace +of base

Поиск при помощи знака –

Если Google находит большое количество станиц, из которых необходимо исключить страницы с определенной тематикой, то можно заставить Google искать только страницы, на которых нет определенных слов. Для этого надо указать эти слова, поставив перед каждым знак – без пробела перед словом. Например:

рыбалка -водка

Поиск при помощи знака ~

Возможно, что вы захотите найти не только указанное слово, но также и его синонимы. Для этого перед словом укажите символ ~.

Поиск точной фразы при помощи двойных кавычек

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

"подставка для книг"

Чтобы было хоть одно из указанных слов нужно указать логическую операцию явно: OR. Например:

книга безопасность OR защита

Кроме того в строке поиска можно использовать знак * для обозначения любого слова и. для обозначения любого символа.

Поиск слов при помощи дополнительных операторов

Существуют поисковые операторы, которые указываются в строке поиска в формате:

operator:search_term

Пробелы рядом с двоеточием не нужны. Если вы вставите пробел после двоеточия, то увидите сообщение об ошибке, а перед ним, то Google будет использовать их как обычную строку для поиска.
Существуют группы дополнительных операторов поиска: языки - указывают на каком языке вы хотите увидеть результат, дата - ограничивают результаты за прошедшие три, шесть или 12 месяцев, вхождения - указывают в каком месте документа нужно искать строку: везде, в заголовке, в URL, домены - производить поиск по указанному сайту или наоборот исключить его из поиска, безопасный поиск - блокируют сайты содержащие указанный тип информации и удаляют их со страниц результатов поиска.
При этом некоторые операторы не нуждаются в дополнительном параметре, например запрос "cache:www.google.com " может быть вызван, как полноценная строка для поиска, а некоторые ключевые слова, наоборот, требуют наличия слова для поиска, например " site:www.google.com help ". В свете нашей тематики посмотрим на следующие операторы:

Оператор

Описание

Требует дополнительного параметра?

поиск только по указанному в search_term сайту

поиск только в документах с типом search_term

найти страницы, содержащие search_term в заголовке

найти страницы, содержащие все слова search_term в заголовке

найти страницы, содержащие слово search_term в своем адресе

найти страницы, содержащие все слова search_term в своем адресе

Оператор site: ограничивает поиск только по указанному сайту, причем можно указать не только доменное имя, но и IP адрес. Например, введите:

Оператор filetype: ограничивает поиск в файлах определенного типа. Например:

На дату выхода статьи Googlе может искать внутри 13 различных форматов файлов:

  • Adobe Portable Document Format (pdf)
  • Adobe PostScript (ps)
  • Lotus 1-2-3 (wk1, wk2, wk3, wk4, wk5, wki, wks, wku)
  • Lotus WordPro (lwp)
  • MacWrite (mw)
  • Microsoft Excel (xls)
  • Microsoft PowerPoint (ppt)
  • Microsoft Word (doc)
  • Microsoft Works (wks, wps, wdb)
  • Microsoft Write (wri)
  • Rich Text Format (rtf)
  • Shockwave Flash (swf)
  • Text (ans, txt)

Оператор link: показывает все страницы, которые указывают на указанную страницу.
Наверно всегда интересно посмотреть, как много мест в Интернете знают о тебе. Пробуем:

Оператор cache: показывает версию сайта в кеше Google, как она выглядела, когда Google последний раз посещал эту страницу. Берем любой, часто меняющийся сайт и смотрим:

Оператор intitle: ищет указанное слово в заголовке страницы. Оператор allintitle: является расширением – он ищет все указанные несколько слов в заголовке страницы. Сравните:

intitle:полет на марс
intitle:полет intitle:на intitle:марс
allintitle:полет на марс

Оператор inurl: заставляет Google показать все страницы содержащие в URL указанную строку. Оператор allinurl: ищет все слова в URL. Например:

allinurl:acid acid_stat_alerts.php

Эта команда особенно полезна для тех, у кого нет SNORT – хоть смогут посмотреть, как он работает на реальной системе.

Методы взлома при помощи Google

Итак, мы выяснили что, используя комбинацию вышеперечисленных операторов и ключевых слов, любой человек может заняться сбором нужной информации и поиском уязвимостей. Эти технические приемы часто называют Google Hacking.

Карта сайта

Можно использовать оператор site: для просмотра всех ссылок, которые Google нашел на сайте. Обычно страницы, которые динамически создаются скриптами, при помощи параметров не индексируются, поэтому некоторые сайты используют ISAPI фильтры, чтобы ссылки были не в виде /article.asp?num=10&dst=5 , а со слешами /article/abc/num/10/dst/5 . Это сделано для того, чтобы сайт вообще индексировался поисковиками.

Попробуем:

site:www.whitehouse.gov whitehouse

Google думает, что каждая страница сайта содержит слово whitehouse. Этим мы и пользуемся, чтобы получить все страницы.
Есть и упрощенный вариант:

site:whitehouse.gov

И что самое приятное - товарищи с whitehouse.gov даже не узнали, что мы посмотрели на структуру их сайта и даже заглянули в кэшированные странички, которые скачал себе Google. Это может быть использовано для изучения структуры сайтов и просмотра содержимого, оставаясь незамеченным до поры до времени.

Просмотр списка файлов в директориях

WEB серверы могут показывать списки директорий сервера вместо обычных HTML страниц. Обычно это делается для того, чтобы пользователи выбирали и скачивали определенные файлы. Однако во многих случаях у администраторов нет цели показать содержимое директории. Это возникает вследствие неправильной конфигурации сервера или отсутствия главной страницы в директории. В результате у хакера появляется шанс найти что-нибудь интересное в директории и воспользоваться этим для своих целей. Чтобы найти все такие страницы, достаточно заметить, что все они содержат в своем заголовке слова: index of. Но поскольку слова index of содержат не только такие страницы, то нужно уточнить запрос и учесть ключевые слова на самой странице, поэтому нам подойдут запросы вида:

intitle:index.of parent directory
intitle:index.of name size

Поскольку в основном листинги директорий сделаны намеренно, то вам, возможно, трудно будет найти ошибочно выведенные листинги с первого раза. Но, по крайней мере, вы уже сможете использовать листинги для определения версии WEB сервера, как описано ниже.

Получение версии WEB сервера.

Знание версии WEB сервера всегда полезно перед началом любой атака хакера. Опять же благодаря Google можно получить эту информацию без подключения к серверу. Если внимательно посмотреть на листинг директории, то можно увидеть, что там выводится имя WEB сервера и его версия.

Apache1.3.29 - ProXad Server at trf296.free.fr Port 80

Опытный администратор может подменить эту информацию, но, как правило, она соответствует истине. Таким образом, чтобы получить эту информацию достаточно послать запрос:

intitle:index.of server.at

Чтобы получить информацию для конкретного сервера уточняем запрос:

intitle:index.of server.at site:ibm.com

Или наоборот ищем сервера работающие на определенной версии сервера:

intitle:index.of Apache/2.0.40 Server at

Эта техника может быть использована хакером для поиска жертвы. Если у него, к примеру, есть эксплойт для определенной версии WEB сервера, то он может найти его и попробовать имеющийся эксплойт.

Также можно получить версию сервера, просматривая страницы, которые по умолчанию устанавливаются при установке свежей версии WEB сервера. Например, чтобы увидеть тестовую страницу Apache 1.2.6 достаточно набрать

intitle:Test.Page.for.Apache it.worked!

Мало того, некоторые операционные системы при установке сразу ставят и запускают WEB сервер. При этом некоторые пользователи даже об этом не подозревают. Естественно если вы увидите, что кто-то не удалил страницу по умолчанию, то логично предположить, что компьютер вообще не подвергался какой-либо настройке и, вероятно, уязвим для атак.

Попробуйте найти страницы IIS 5.0

allintitle:Welcome to Windows 2000 Internet Services

В случае с IIS можно определить не только версию сервера, но и версию Windows и Service Pack.

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

inurl:manual apache directives modules

Использование Google как CGI сканера.

CGI сканер или WEB сканер – утилита для поиска уязвимых скриптов и программ на сервере жертвы. Эти утилиты должны знать что искать, для этого у них есть целый список уязвимых файлов, например:

/cgi-bin/cgiemail/uargg.txt
/random_banner/index.cgi
/random_banner/index.cgi
/cgi-bin/mailview.cgi
/cgi-bin/maillist.cgi
/cgi-bin/userreg.cgi

/iissamples/ISSamples/SQLQHit.asp
/SiteServer/admin/findvserver.asp
/scripts/cphost.dll
/cgi-bin/finger.cgi

Мы может найти каждый из этих файлов с помощью Google, используя дополнительно с именем файла в строке поиска слова index of или inurl: мы можем найти сайты с уязвимыми скриптами, например:

allinurl:/random_banner/index.cgi

Пользуясь дополнительными знаниями, хакер может использовать уязвимость скрипта и с помощью этой уязвимости заставить скрипт выдать любой файл, хранящийся на сервере. Например файл паролей.

Как защитить себя от взлома через Google.

1. Не выкладывайте важные данные на WEB сервер.

Даже если вы выложили данные временно, то вы можете забыть об этом или кто-то успеет найти и забрать эти данные пока вы их не стерли. Не делайте так. Есть много других способов передачи данных, защищающих их от кражи.

2. Проверьте свой сайт.

Используйте описанные методы, для исследования своего сайта. Проверяйте периодически свой сайт новыми методами, которые появляются на сайте http://johnny.ihackstuff.com . Помните, что если вы хотите автоматизировать свои действия, то нужно получить специальное разрешение от Google. Если внимательно прочитать http://www.google.com/terms_of_service.html , то вы увидите фразу: You may not send automated queries of any sort to Google"s system without express permission in advance from Google.

3. Возможно, вам не нужно чтобы Google индексировал ваш сайт или его часть.

Google позволяет удалить ссылку на свой сайт или его часть из своей базы, а также удалить страницы из кэша. Кроме того вы можете запретить поиск изображений на вашем сайте, запретить показывать короткие фрагменты страниц в результатах поиска Все возможности по удалению сайта описаны на сранице http://www.google.com/remove.html . Для этого вы должны подтвердить, что вы действительно владелец этого сайта или вставить на страницу теги или

4. Используйте robots.txt

Известно, что поисковые машины заглядывают в файл robots.txt лежащий в корне сайта и не индексируют те части, которые помечены словом Disallow . Вы можете воспользоваться этим, для того чтобы часть сайта не индексировалась. Например, чтобы не индексировался весь сайт, создайте файл robots.txt содержащий две строчки:

User-agent: *
Disallow: /

Что еще бывает

Чтобы жизнь вам медом не казалась, скажу напоследок, что существуют сайты, которые следят за теми людьми, которые, используя вышеизложенные выше методы, разыскивают дыры в скриптах и WEB серверах. Примером такой страницы является

Приложение.

Немного сладкого. Попробуйте сами что-нибудь из следующего списка:

1. #mysql dump filetype:sql - поиск дампов баз данных mySQL
2. Host Vulnerability Summary Report - покажет вам какие уязвимости нашли другие люди
3. phpMyAdmin running on inurl:main.php - это заставит закрыть управление через панель phpmyadmin
4. not for distribution confidential
5. Request Details Control Tree Server Variables
6. Running in Child mode
7. This report was generated by WebLog
8. intitle:index.of cgiirc.config
9. filetype:conf inurl:firewall -intitle:cvs – может кому нужны кофигурационные файлы файрволов? :)
10. intitle:index.of finances.xls – мда....
11. intitle:Index of dbconvert.exe chats – логи icq чата
12. intext:Tobias Oetiker traffic analysis
13. intitle:Usage Statistics for Generated by Webalizer
14. intitle:statistics of advanced web statistics
15. intitle:index.of ws_ftp.ini – конфиг ws ftp
16. inurl:ipsec.secrets holds shared secrets – секретный ключ – хорошая находка
17. inurl:main.php Welcome to phpMyAdmin
18. inurl:server-info Apache Server Information
19. site:edu admin grades
20. ORA-00921: unexpected end of SQL command – получаем пути
21. intitle:index.of trillian.ini
22. intitle:Index of pwd.db
23. intitle:index.of people.lst
24. intitle:index.of master.passwd
25. inurl:passlist.txt
26. intitle:Index of .mysql_history
27. intitle:index of intext:globals.inc
28. intitle:index.of administrators.pwd
29. intitle:Index.of etc shadow
30. intitle:index.of secring.pgp
31. inurl:config.php dbuname dbpass
32. inurl:perform filetype:ini

  • "Hacking mit Google"
  • Учебный центр "Информзащита" http://www.itsecurity.ru - ведущий специализированный центр в области обучения информационной безопасности (Лицензия Московского Комитета образования № 015470, Государственная аккредитация № 004251). Единственный авторизованный учебный центр компаний Internet Security Systems и Clearswift на территории России и стран СНГ. Авторизованный учебный центр компании Microsoft (специализация Security). Программы обучения согласованы с Гостехкомиссией России, ФСБ (ФАПСИ). Свидетельства об обучении и государственные документы о повышении квалификации.

    Компания SoftKey – это уникальный сервис для покупателей, разработчиков, дилеров и аффилиат–партнеров. Кроме того, это один из лучших Интернет-магазинов ПО в России, Украине, Казахстане, который предлагает покупателям широкий ассортимент, множество способов оплаты, оперативную (часто мгновенную) обработку заказа, отслеживание процесса выполнения заказа в персональном разделе, различные скидки от магазина и производителей ПО.

    "Designed by: PHPLD Your Site" "Submit Article" "Powered by ArticleMS" "Submit Article" "Main Menu" "Latest Articles" "Designer: Astralinks Directory" "Submit Article" "Submit Articles" "Member Login" "Most Popular Articles" "Article RSS Feeds" "Fields marked with an asterisk are required" joomla "Designer: Free PHPLD Templates" "Submit Article" "RSS Articles" "RSS comments" "Recent Articles" "Authorization" "Username:" "Password:" "Remember Me" "Register" "Lost your password?" "Startseite ? Weblogs ? Weblog von" "RSS Feeds" "Add us to favorites" "Make us your home page" "Submit Articles" "Regular links with reciprocal" Article inurl:"/access/unauthenticated" Forums "Template by DevHunters.com" "Add Article" "Proudly powered by WordPress and BuddyPress" "Designer: Free PHPLD Templates" "Add Article" "This question is for testing whether you are a human visitor and to prevent automated spam submissions" "To validate the reciprocal link please include the following HTML code in the page at the URL" "Add Article" "Random Press Releases" "Press Release Script" inurl:"/blogs/load/recent" "Article Of The Week" "Article Directory All Rights reserved." "Designed by: PHPLD Your Site" "Submit Article" "Alexa Information" "Listing Details" "LISTING URL" "Site Statistics" "Add Article" "Designed by One Way Links" "Add Article" "We invite you to check out our catalog of articles from the categories to your left, and be sure to add this site to your favorites!" "Designer: PHPLD Templates" "Add Article" "More information about text formats" "Rate Author: Current:" "Powered by: php Link Directory" "Add Article" "Unacceptable Sites, Content & few reasons why submissions are not approved:" "Add Article" "Template By Yazzoo" "Add Article" "Theme by: Romow Web Directory" "Submit Article" "Powered by WordPress + Article Directory plugin" "Theme By: Web Directory" "Submit Article" "RSS Articles" "RSS comments" "Recent Articles" "Powered by: php Link Directory" "Add Article" "%E8%AB%8B%E6%BA%96%E7%A2%BA%E5%A1%AB%E5%85%A5%E6%82%A8%E7%9A%84%E9%83%B5%E7%AE%B1%EF%BC%8C%E5%9C%A8%E5%BF%98%E8%A8%98%E5%AF%86%E7%A2%BC%EF%BC%8C%E6%88%96%E8%80%85%E6%82%A8%E4%BD%BF%E7%94%A8%E9%83%B5%E4%BB%B6%E9%80%9A%E7%9F%A5%E5%8A%9F%E8%83%BD%E6%99%82%EF%BC%8C%E6%9C%83%E7%99%BC%E9%80%81%E9%83%B5%E4%BB%B6%E5%88%B0%E8%A9%B2%E9%83%B5%E7%AE%B1%E3%80%82" "Using Article Directory plugin" "This link directory uses sessions to store information" "Add Article" "Blog Menu" "Create Blog" "My Blogs" "PHPmotion" "PHPLD CLUB - FREE THEMES FOR YOU" "Add Article" "Skinned by: Web Design Directory" "Add Article" "Template By Yazzoo" "Add Article" "Template by DevHunters.com" "Add Article" "You do not have permission to comment. If you log in, you may be able to comment" "Template By Free PHPLD Templates" "Add Article" "Sponsored By: Webmaster Tips & Tricks / Download FREE phpLD Themes" "Submit Article" "Theme By: Web Directory" "Add Article" "Use the articles in our directory on your website to provide your visitors" "Powered by: php Link Directory" "Submit Article" "Supported by Bid for Position" "Add Article" "Theme by: Romow Web Directory" "Submit Article" "Supported by Bid for Position" "Submit Article" "Supported by Bid for Position" "Add Article" "Sponsored By: Webmaster Tips & Tricks / Download FREE phpLD Themes" "Submit Article" "Designed by Mitre Design and SWOOP" "Submit Article" "Theme By: Web Directory" "Add Article" "Home Videos Audios" Blogs phpmotion "Template by DevHunters.com" "Submit Article" "Designed By: Invitation Web Directory" "Add Article" "registered authors in our article directory" "PHP Link Directory" "Add Article" "Sponsored By: Webmaster Tips & Tricks / Download FREE phpLD Themes" "Add Article" "Powered by Article Dashboard" "Anmelden oder Registrieren um Kommentare zu schreiben" "Startseite ? Weblogs" "Developed by Hutbazar" "Add Article" Home Members RSS "created the group" "Please create an account to get started." "Powered By: Article Friendly Ultimate" inurl:"/wp-login.php?action=register" "Designer: PHPLD Templates" "Submit Article" "powered by joomla" "add new post" "Designed by One Way Links" "Add Article" "To validate the reciprocal link please include the following HTML code in the page at the URL" "Submit Article" "Sponsored by Directhoo" "Add Article" "Template by: Emillie Premium Directory" "Submit Article" "There are * published articles and * registered authors" inurl:"/node/1" "You are here" "Publish your article in RSS format for other websites to syndicate" "Template By Yazzoo" "Submit Article" "Powered by PHPLD" "Submit Article" "Articles with any spelling or grammar errors will be deleted" "DIRECTORY SCRIPT BY PHP LINK DIRECTORY" "Add Article" inurl:submitguide.php "submit articles" "Editors Picks" "Press Release Script" "Add Article" "PHP Link Directory" Home "Free Signup" "Submit Article" "About Us" "Contact Us" "Search Site" "Author Login" "Alexa Information" "Listing Details" "LISTING URL" "Site Statistics" "Add Article" "This link directory uses sessions to store information" "Add Article" "Designed by: PHPLD Your Site" "Add Article" "Submit Articles" "If you do not have an account yet, you may register here." "designed by AskGraphics.com" "Submit Article" inurl:"/user/profile.php?id=" moodle "Most Rated Press Releases" "Press Release Script" "Do not submit articles filled with spelling errors and bad grammar" "Theme by: Romow Web Directory" "Add Article" "Use the Articles search box to locate articles on a range of topics" "Sponsored by Directhoo" "Add Article" "PHP Link Directory" inurl:"submit_article.php" "This author has published * articles so far. More info about the author is coming soon." "Powered by PHPLD" "Submit Article" "Powered by PHPmotion" - Free Video Script "Powered by: php Link Directory" "Submit Article" "Would You like us to send you a daily digest about new articles every day" "Expert Authors" "Article Directory All Rights reserved." "PHP Link Directory" "Add Article" "Skinned by: Web Design Directory" "Submit Article" Subject Homepage "Allow Comments" "Allow Trackbacks" "Maximum Attachments" "Home › Blogs" "Login or register to post comments" "PHPLD CLUB - FREE THEMES FOR YOU" "Submit Article" "Submit Link" Pricing "Enter the code shown" "This helps prevent automated registrations." "Submit Article" "Designed By: Invitation Web Directory" "Submit Article" "Template by: Emillie Premium Directory" "Add Article" "This link directory uses sessions to store information" "Submit Article" "To prevent automated spam submissions leave this field empty" Country "City/town" "Last access" "You are not logged in" "Wordpress Article Directory Script" "PHP Link Dircetory" "Add Article" "Live Articles" "Article Directory All Rights reserved." "Article Details" "You must be logged in to leave a rating" "You must be logged in to leave a Comment" "Designed by One Way Links" "Submit Article" "Designed By: Invitation Web Directory" "Add Article" "Template by: Emillie Premium Directory" "Submit Article" "The content of this field is kept private and will not be shown publicly" "Designed by: Futuristic Artists" "Add Article" "Designer: Astralinks Directory" "Submit Article" "Unacceptable Sites, Content & few reasons why submissions are not approved:" "Add Article" "Hot Press Releases" "Press Release Script" "Notify me of new posts by email" inurl:"populararticles.php" "Your virtual face or picture" "Submit Article" "PHP Link Directory" "Submitted by" "Login or register to post comments" "Search this site:" "Article Details" "You must be logged in to leave a rating" "You must be logged in to leave a Comment" "Wordpress Article Directory Script" "PHP Link Dircetory" "Submit Article" "powered by vbulletin" "Recent Blogs Posts" "Submit Articles" inurl:"submitart.php" "Designed By: Invitation Web Directory" "Submit Article" "Submit Articles" "Total Articles" "Total Authors" "Total Downloads" "Designed by Mitre Design and SWOOP" "Add Article" "Designed by: Futuristic Artists" "Submit Article" "You may set detail component configures by double-clicking background, text, images, or quotations" "Press Release Categories" "Press Release Script" "Designed by: PHPLD Your Site" "Add Article" "Sponsored by Directhoo" "Submit Article" "Author Terms of Service" "Publisher Terms of Service" "Disclaimer" "We reserve the right to include advertising on pages with your articles" "powered by phpmotion" Blogs inurl:"login.php" "Signup now to submit your own articles" Home "Add Article" "Latest Links" "Top Hits" "Powered by ArticleMS from ArticleTrader.com" "Submitted by Anonymous" "Login or register to post comments" "Most Popular Articles" "Article Directory All Rights reserved." "Skinned by Addictive Games" "Submit Article" "Terms of Use" "This is a demo page only." "themes/default/templates/generic_terms.htm" "Submit Link" Pricing "Enter the code shown" "This helps prevent automated registrations." "Add Article" "Skinned by Addictive Games" "Submit Article" inurl:"login2submitart.php" "There are * published articles and * registered authors in our article directory." "Rate this Article: Current:" Subject inurl:"act=dispBoardWrite" inurl:"login.php" "Login to access your author control panel" "Submit Link" Pricing "Enter the code shown" "This helps prevent automated registrations." "Submit Article" moodle "public profile" "Provide a password for the new account in both fields Password must be at least" "To validate the reciprocal link please include the following HTML code in the page at the URL" "Add Article" "Skinned by Addictive Games" "Add Article" "More information about formatting options" "Designed by One Way Links" "Submit Article" "Alexa Information" "Listing Details" "LISTING URL" "Site Statistics" "Submit Article" "designed by AskGraphics.com" "Add Article" "By publishing information packed articles, you’ll soon enjoy" inurl:"submitarticles.php" "Powered by Press Release Script" "Sign-Up" "Please fill out this form, and we"ll send you a welcome email to verify your email address and log you in." Forums "Designer: Free PHPLD Templates" "Add Article" inurl:"/blog/index.php?postid=" moodle "Developed by Hutbazar" "Submit Article" "Designer: Astralinks Directory" "Add Article" "Publish your article in RSS format for other websites to syndicate" Home "Submit Article" "Latest Links" "Top Hits" "Template by DevHunters.com" "Submit Article" link:"www.articledashboard.com" "Login to Your Account" "Login to access your author control panel" "Don"t have an account?" "Your one-stop source for free articles. Do you need contents to add to your web site?" "Powered by PHPLD" "Add Article" "Lines and paragraphs break automatically" "Recently Approved Articles" "Article Directory All Rights reserved." "Template by: PHPmotionTemplates.com" "Smart Blog" "Add new post" "PHP Link Directory" inurl:"submit_article.php" "DIRECTORY SCRIPT BY PHP LINK DIRECTORY" "Add Article" "Supported by Bid for Position" "Submit Article" "PHP Link Directory" "Submit Article" "DIRECTORY SCRIPT BY PHP LINK DIRECTORY" "Submit Article" "Developed by Hutbazar" "Submit Article" "Sponsored By: Webmaster Tips & Tricks / Download FREE phpLD Themes" "Add Article" "Hot Articles" "Article Directory All Rights reserved." "Powered Free by PHPmotion" Blogs "Notify me when new comments are posted" "To validate the reciprocal link please include the following HTML code in the page at the URL" "Submit Article" "There are now * Excellent Articles in our Database from * Authors" "This link directory uses sessions to store information" "Submit Article" "upload your articles and keep updated about new articles." Home "Add Article" "Latest Links" "Top Hits" "Unacceptable Sites, Content & few reasons why submissions are not approved:" "Submit Article" "Copyright * vBulletin Solutions" "Create Blog" "Template By Free PHPLD Templates" "Add Article" "Press Release Of The Week" "Press Release Script" "Template By Free PHPLD Templates" "Submit Article" "upload your articles and keep updated about new articles." "PHPLD CLUB - FREE THEMES FOR YOU" "Add Article" "Post Article Comments" "Article Directory All Rights reserved." "Create new account Log in Request new password" "Use the articles in our directory on your website to provide your visitors" "DIRECTORY SCRIPT BY PHP LINK DIRECTORY" "Submit Article" "Powered by WordPress ž Using Article Directory plugin" "Skinned by Addictive Games" "Add Article" "Recently Approved" "Press Release Script" "Editors Picks" "Article Directory All Rights reserved." "Alexa Information" "Listing Details" "LISTING URL" "Site Statistics" "Submit Article" "Template by: Emillie Premium Directory" "Add Article" "Support Software by Zendesk" Forums "Designed by: Futuristic Artists" "Add Article" "You are not logged in. (Login)" Country "City/Town" "Web page" "Random Articles" "Article Directory All Rights reserved." "Designed by Mitre Design and SWOOP" "Add Article" "Developed by Hutbazar" "Add Article" "Contact Us" "This is a demo page only." "themes/default/templates/generic_contactus.htm" "Unacceptable Sites, Content & few reasons why submissions are not approved:" "Submit Article" "Public Group" "Popular Search Terms" "Recent Search Terms" "Powered by UCenter Home" "Designer: PHPLD Templates" "Submit Article" "Welcome!" "Article Submission" "Our New Articles" "Powered By: Article Friendly" "total articles" "Designer: PHPLD Templates" "Add Article" "Template By Free PHPLD Templates" "Submit Article" "Theme By: Web Directory" "Submit Article" "If you have hired a ghost writer, you agree that you have" "designed by AskGraphics.com" "Submit Article" "Designer: Astralinks Directory" "Add Article" "Designed by: Futuristic Artists" "Submit Article" "Expert Authors" "Press Release Script" "About the Author" "Recent posts" "Add new comment" "Website Design and Developed by ArticleBeach" "Skinned by: Web Design Directory" "Submit Article" "Provide a password for the new account in both fields" "Designed by Mitre Design and SWOOP" "Submit Article" "Here are the most popular 100 articles on" "Article Script - Powered By Article Marketing" "Submit Articles" "Please login to write comment" "add new post" "Login to post new content in the forum." "Powered by Drupal" "support software" inurl:"/entries/" "Wordpress Article Directory Script" "PHP Link Dircetory" "Submit Article" "Add Article" "PHP Link Directory" "Submit Link" Pricing "Enter the code shown" "This helps prevent automated registrations." "Add Article" "PHP Link Directory" "Submit Article" "Create your own personal address so your friends and family can find you!" "Most Rated Articles" "Article Directory All Rights reserved." "Skinned by: Web Design Directory" "Add Article" "Regular links with reciprocal" Article "Template By Yazzoo" "Submit Article" "Submit Article" "PHP Link Directory" "Theme by: Romow Web Directory" "Add Article" "PHPLD CLUB - FREE THEMES FOR YOU" "Submit Article" Home "Submit Article" "Latest Links" "Top Hits" "Welcome to article directory *. Here you can find interesting and useful information on most popular themes." "About Us" "This is a demo page only." "themes/default/templates/generic_aboutus.htm" "Newest Authors" "Welcome to our new authors!" "As a member you will be able to" "So what are you waiting for?" "Register now to begin, it"s fun and it"s FREE!" Blogs "Designer: Free PHPLD Templates" "Submit Article" "Wordpress Article Directory Script" "PHP Link Dircetory" "Add Article" "Additional Articles From" "Posted by Anonymous (not verified)" "designed by AskGraphics.com" "Add Article" "Login to access your author control panel" "Signup now to submit your own articles" "This question is for testing whether or not you are a human visitor and to prevent automated spam submissions" inurl:"/node/2" "You are here" "Advertise With Us" "This is a demo page only." "themes/default/templates/generic_advertise.htm" "Sponsored by Directhoo" "Submit Article" link:www.articletrader.com "Powered by vBulletin" "Create Blog" "Powered by PHPLD" "Add Article" inurl:"/node/3" "You are here" "Design and Developed by ArticleBeach" "Powered by Article Dashboard" inurl:submitarticles.php inurlopulararticles.php "Powered By: Article Friendly" inurl:submitguide.php "submit articles" "Powered by ArticleMS" "Using Article Directory plugin" "Join now to promote your business, find partners, build relationships and reconnect with community. Sync with Facebook Twitter Email SMS and more" "is a micro-blogging service based on the Free Software Laconica tool." "External Profiles" "Last online" "About Me" "Public notes" FAQ Contact "Mobile interface" "what are you doing" "groups" "Most popular" "All Groups" "Forgot your password?" "Powered By" "revou" "Join now to promote your business, find partners, build relationships and reconnect with community. Sync with Facebook Twitter Email SMS and more" "Having trouble while logging in?" "Public notes" "all time" "last month" "show picture updates" "show text updates" inurl:"/recentupdates.php?m=" "It runs the StatusNet microblogging software" "is a micro-blogging service based on the Free Software StatusNet tool." "join the conversation" "image code" "register below." "users can communicate using quick status updates of 160 characters or less." "This free flowing dialogue lets you send messages, pictures and video to anyone" "Sign up with your email address. There are already * registered members." "My text and files are available under Creative Commons Attribution 3.0 except this private data: password, email address, IM address, and phone number." groups "Most popular" "All Groups" "Forgot your password?" "Powered By" "ReVou Software" "Let my messages are visible to all users, not just to my friends" "Powered by Sharetronix" "Powered by Jisko" "With this form you can create a new account. You can then post notices and link up to friends and colleagues." "With this form you can create a new account. You can then post notices and link up to friends and colleagues." "My text and files are available under Creative Commons Attribution 3.0 except this private data: password, email address, IM address, and phone number." "Your Name (without space between letters and words)" "Powered by Blogtronix" "powered by twitter script" "Copyright * Twitter Script" "It runs the Laconica microblogging software" "Powered by * Script" inurl:"/recentupdates.php" "Powered by Scritter Script" "Attached Image: " "Powered by Blogtronix" "Public notes" "Terms of Service" "Normal version" "It`s also easy to find and connect with other people for private threads and to keep track of their updates." "Public notes" "Normal version" "Login" "Powered By ReVou Software" inurl:"Special:UserLogin" wiki inurl:":UserLogin" "Theme: Feb12" "first" "prev" "1-20 of" "next" inurl:groups inurl:"http://wiki." "Recently commented pages" "CategoryWiki" inurl:"title=Lietot%C4%81ja_diskusija:" "MoinMoin Powered" "Valid HTML 4.01" inurl:"Utilizador:" wiki inurl:"title=User:" wiki "Deze pagina is het laatst bewerkt op" "Deze pagina is" "Aanmelden / registreren" "MoinMoin Powered" "GPL licensed" inurl:"title=%D0%9E%D0%B1%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B5%D0%BD%D0%BD%D1%8F_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%B0:" "DokuWiki supports some simple markup language" "What’s Hot" "Recent Changes" "Upcoming Events" "Tags" inurl:"title=Diskuse_s_u%C5%BEivatelem:" "Mac OS X Server - Wikis" inurl:"title=%E0%A6%AC%E0%A7%8D%E0%A6%AF%E0%A6%AC%E0%A6%B9%E0%A6%BE%E0%A6%B0%E0%A6%95%E0%A6%BE%E0%A6%B0%E0%A7%80_%E0%A6%86%E0%A6%B2%E0%A6%BE%E0%A6%AA:" inurl:"tiki-forums.php" inurl:"User_talk:" wiki "You will find more useful pages in the Wiki category or in the PageIndex" inurl:"title=Kasutaja_arutelu:" inurl:"title=%E5%88%A9%E7%94%A8%E8%80%85%E2%80%90%E4%BC%9A%E8%A9%B1:" inurl:"Spezial:Anmelden" wiki "Thčme: Strasa - Mono" inurl:"title=Diskuse_s_wikistou:" "Collaborate with online document creation, editing, and comments." "Log in to my page" "wikis" inurl:/wiki/dokuwiki inurl:"wiki/RecentlyCommented" inurl:"http://mediawiki." inurl:"title=%E5%88%A9%E7%94%A8%E8%80%85%E3%83%BB%E3%83%88%E3%83%BC%E3%82%AF:" inurl:"%ED%8A%B9%EC%88%98%EA%B8%B0%EB%8A%A5:%EB%A1%9C%EA%B7%B8%EC%9D%B8" wiki inurl:"title=%D7%A9%D7%99%D7%97%D7%AA_%D7%9E%D7%A9%D7%AA%D7%9E%D7%A9:" "Theme: Eatlon" "There are no comments on this page." "Your hostname is" "Valid XHTML" "Valid CSS" inurl:"title=%D8%A8%D8%AD%D8%AB_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1:" inurl:"title=Usuario:" inurl:"/wikka.php?wakka=UserSettings" "what links here" "related changes" "special pages" inurl:"title=%E0%B8%84%E0%B8%B8%E0%B8%A2%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%8A%E0%B9%89:" intitle:"Mac OS X Server" "Powered by TikiWiki CMS/Groupware v2" "This page was last modified" "This page has been accessed" "Log in / create account" "Immutable Page" Info Attachments "There is currently no text in this page, you can search for this page title in other pages or edit this page." "Driven by DokuWiki" "Thank you for installing TikiWiki!" inurl:"title=Special:UserLogin" "Diese Seite wurde zuletzt am" "Diese Seite wurde bisher" "Anmelden / Benutzerkonto erstellen" inurl:"Utilisateur:" wiki inurl:groups "log in to my page" "updates" "wikis" "blogs" "calendar" "mail" "Theme: Ohia" "Powered by TikiWiki" FrontPage RecentChanges FindPage Help Contents inurl:"title=Th%E1%BA%A3o_lu%E1%BA%ADn_Th%C3%A0nh_vi%C3%AAn:" inurl:"title=Szerkeszt%C5%91vita:" inurl:"/wikka/UserSettings" "What’s Hot" "Recent Changes" "Upcoming Events" inurl:"%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C4%83ng_nh%E1%BA%ADp" wiki inurl:"%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:" wiki inurl:"title=Pembicaraan_Pengguna:" inurl:"wiki/index.php?title=" wiki inurl:"title=%E0%A4%B8%E0%A4%A6%E0%A4%B8%E0%A5%8D%E0%A4%AF_%E0%A4%B5%E0%A4%BE%E0%A4%B0%E0%A5%8D%E0%A4%A4%E0%A4%BE:" inurl:"title=Benutzer_Diskussion:" "Theme: Fivealive" inurl:"title=Diskusia_s_redaktorom:" "What’s Hot" "Recent Changes" "Upcoming Events" "Tags" "Edited" inurl:"tiki-index.php" inurl:"title=%D0%A0%D0%B0%D0%B7%D0%B3%D0%BE%D0%B2%D0%BE%D1%80_%D1%81%D0%B0_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D0%BD%D0%B8%D0%BA%D0%BE%D0%BC:" inurl:"title=Bruger_diskussion:" inurl:"Especial:Registre_i_entrada" wiki inurl:"title=Usuari_Discussi%C3%B3:" inurl:"title=Overleg_gebruiker:" inurl:"title=%CE%A3%CF%85%CE%B6%CE%AE%CF%84%CE%B7%CF%83%CE%B7_%CF%87%CF%81%CE%AE%CF%83%CF%84%CE%B7:" "Make sure to whitelist this domain to prevent registration emails being canned by your spam filter!" inurl:"Especial:Userlogin" wiki inurl:"%E4%BD%BF%E7%94%A8%E8%80%85:" wiki inurl:"title=Usuario_discusi%C3%B3n:" inurl:"title=Brugerdiskussion:" "Theme: Jqui" inurl:"title=Brukerdiskusjon:" "wiki is licensed under" "What’s Hot" "Recent Changes" inurl:"tiki-login.php" inurl:"Special:Inloggning" wiki "MoinMoin Powered" inurl:"Speci%C3%A1ln%C3%AD:P%C5%99ihl%C3%A1sit" wiki inurl:"Speci%C3%A1lis:Bel%C3%A9p%C3%A9s" wiki inurl:"title=Anv%C3%A4ndardiskussion:" inurl:"Special:Whatlinkshere" "pageindex" "recentchanges" "recentlycommented" inurl:"/RecentlyCommented" site:.edu "forums register" site:.edu "register iam over 13 years of age forum" site:.edu "discussion board register" site:.edu "bulletin board register" site:.edu "message board register" site:.edu "phpbb register forum" site:.edu "punbb register forum" site:.edu "forum signup" site:.edu "vbulletin forum signup" site:.edu "SMF register forum" site:.edu "register forum Please Enter Your Date of Birth" site:.edu "forums - Registration Agreement" site:.edu "forum Whilst we attempt to edit or remove any messages containing inappropriate, sexually orientated, abusive, hateful, slanderous" site:.edu "forum By continuing with the sign up process you agree to the above rules and any others that the Administrator specifies." site:.edu "forum In order to proceed, you must agree with the following rules:" site:.edu "forum register I have read, and agree to abide by the" site:.edu "forum To continue with the registration procedure please tell us when you were born." site:.edu "forum I am at least 13 years old." site:.edu "Forum Posted: Tue May 05, 2009 8:24 am Memberlist Profile" site:.edu "View previous topic:: View next topic forums" site:.edu "You cannot post new topics in this forum" site:.edu "proudly powered by bbPress" site:.edu "bb-login.php" site:.edu "bbpress topic.php" site:.edu "Powered by PunBB viewforum.php" site:.edu "Powered by PunBB register.php" site:.edu "The Following User Says Thank You to for this post" site:.edu "BB code is On" site:.edu "Similar Threads All times are GMT +1? site:.edu "If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post" site:.edu "Hot thread with no new posts" site:.edu "Thread is closed" site:.edu "There are 135 users currently browsing forums." site:.edu "forums post thread" site:.edu "forums new topic" site:.edu "forums view thread" site:.edu "forums new replies" site:.edu "forum post thread" site:.edu "forum new topic" site:.edu "forum view thread" site:.edu "forum new replies" site:.edu "add topic" site:.edu "new topic" site:.edu "phpbb" site:.edu "view topic forum" site:.edu "add message" site:.edu "send message" site:.edu "post new topic" site:.edu "new thread forum" site:.edu "send thread forum" site:.edu "VBulletin forum" site:.edu "Quick Reply Quote message in reply?" site:.edu "Currently Active Users: 232 (0 members and 232 guests)" site:.edu "Currently Active Users: members and guests" site:.edu "Forums Posting Statistics Newest Member" site:.edu "Users active in past 30 minutes: SMF" site:.edu "Users active in past 30 minutes: Most Online Today Most Online Ever" site:.edu "Most Online Today Most Online Ever Forums" site:.edu "Currently Active Users: 18 (0 members and 18 guests)" site:.edu "Users active today: 15478 (158 members and 15320 guests)" site:.edu "Threads: 673, Posts: 7,321, Total Members: 376? site:.edu "Add this forum to your Favorites List! Threads in Forum:" site:.edu "Threads in Forum Hot thread with no new posts" site:.edu "powered by vbulletin" site:.edu "powered by yabb" site:.edu "powered by ip.board" site:.edu "powered by phpbb" site:.edu "powered by phpbb3? site:.edu "powered by invision power board" site:.edu "powered by e-blah forum software" site:.edu "powered by xmb" site:.edu "powered by: fudforum" site:.edu "powered by fluxbb" site:.edu "powered by forum software minibb" site:.edu "this forum is powered by phorum" site:.edu "powered by punbb" site:.edu "powered by quicksilver forums" site:.edu "powered by seo-board" site:.edu "powered by smf" site:.edu "powered by ubb.threads" site:.edu "powered by the unclassified newsboard" site:.edu "powered by usebb forum software" site:.edu "powered by xennobb" site:.edu "powered by yaf" site:.edu "Powered By MyBB" site:.edu "Powered by IP.Board" site:.edu "powered by phpbb" site:.edu "forums post thread" site:.edu "forums new topic" site:.edu "forums view thread" site:.edu "forums new replies" site:.edu "forum post thread" site:.edu "forum new topic" site:.edu "forum view thread" site:.edu "forum new replies" site:.edu "forum" site:.edu "phorum" site:.edu "add topic" site:.edu "new topic" site:.edu "phpbb" site:.edu "yabb" site:.edu "ipb" site:.edu "posting" site:.edu "add message" site:.edu "send message" site:.edu "post new topic" site:.edu "new thread" site:.edu "send thread" site:.edu "vbulletin" site:.edu "bbs" site:.edu "intext:powered by vbulletin" site:.edu "intext:powered by yabb" site:.edu "intext:powered by ip.board" site:.edu "intext:powered by phpbb" site:.edu "inanchor:vbulletin" site:.edu "inanchor:yabb" site:.edu "inanchor:ip.board" site:.edu "inanchor:phpbb" site:.edu "/board" site:.edu "/board/" site:.edu "/foren/" site:.edu "/forum/" site:.edu "/forum/?fnr=" site:.edu "/forums/" site:.edu "/sutra" site:.edu "act=reg" site:.edu "act=sf" site:.edu "act=st" site:.edu "bbs/ezboard.cgi" site:.edu "bbs1/ezboard.cgi" site:.edu "board" site:.edu "board-4you.de" site:.edu "board/ezboard.cgi" site:.edu "boardbook.de" site:.edu "bulletin" site:.edu "cgi-bin/ezboard.cgi" site:.edu "invision" site:.edu "kostenlose-foren.org" site:.edu "kostenloses-forum.com" site:.edu "list.php" site:.edu "lofiversion" site:.edu "modules.php" site:.edu "newbb" site:.edu "newbbs/ezboard.cgi" site:.edu "onlyfree.de/cgi-bin/forum/" site:.edu "phpbbx.de" site:.edu "plusboard.de" site:.edu "post.php" site:.edu "profile.php" site:.edu "showthread.php" site:.edu "siteboard.de" site:.edu "thread" site:.edu "topic" site:.edu "ubb" site:.edu "ultimatebb" site:.edu "unboard.de" site:.edu "webmart.de/f.cfm?id=" site:.edu "xtremeservers.at/board/" site:.edu "yooco.de" site:.edu "forum" site:.edu "phorum" site:.edu "add topic" site:.edu "new topic" site:.edu "phpbb" site:.edu "yabb" site:.edu "ipb" site:.edu "posting" site:.edu "add message" site:.edu "send message" site:.edu "post new topic" site:.edu "new thread" site:.edu "send thread" site:.edu "vbulletin" site:.edu "bbs" site:.edu "cgi-bin/forum/" site:.edu "/cgi-bin/forum/blah.pl" site:.edu "powered by e-blah forum software" site:.edu "powered by xmb" site:.edu "/forumdisplay.php?" site:.edu "/misc.php?action=" site:.edu "member.php?action=" site:.edu "powered by: fudforum" site:.edu "index.php?t=usrinfo" site:.edu "/index.php?t=thread" site:.edu "/index.php?t=" site:.edu "index.php?t=post&frm_id=" site:.edu "powered by fluxbb" site:.edu "/profile.php?id=" site:.edu "viewforum.php?id" site:.edu "login.php" site:.edu "register.php" site:.edu "profile.forum?" site:.edu "posting.forum&mode=newtopic" site:.edu "post.forum?mode=reply" site:.edu "powered by icebb" site:.edu "index.php?s=" site:.edu "act=login&func=register" site:.edu "act=post&forum=19? site:.edu "forums/show/" site:.edu "module=posts&action=insert&forum_id" site:.edu "posts/list" site:.edu "/user/profile/" site:.edu "/posts/reply/" site:.edu "new_topic.jbb?" site:.edu "powered by javabb 0.99? site:.edu "login.jbb" site:.edu "new_member.jbb" site:.edu "reply.jbb" site:.edu "/cgi-bin/forum/" site:.edu "cgi-bin/forum.cgi" site:.edu "/registermember" site:.edu "listforums?" site:.edu "forum mesdiscussions.net" site:.edu "version" site:.edu "index.php?action=vtopic" site:.edu "powered by forum software minibb" site:.edu "index.php?action=registernew" site:.edu "member.php?action=register" site:.edu "forumdisplay.php" site:.edu "newthread.php?" site:.edu "newreply.php?" site:.edu "/phorum/" site:.edu "phorum/list.php" site:.edu "this forum is powered by phorum" site:.edu "phorum/posting.php" site:.edu "phorum/register.php" site:.edu "phpbb/viewforum.php?" site:.edu "/phpbb/" site:.edu "phpbb/profile.php?mode=register" site:.edu "phpbb/posting.php?mode=newtopic" site:.edu "phpbb/posting.php?mode=reply" site:.edu "/phpbb3/" site:.edu "phpbb3/ucp.php?mode=register" site:.edu "phpbb3/posting.php?mode=post" site:.edu "phpbb3/posting.php?mode=reply" site:.edu "/punbb/" site:.edu "punbb/register.php" site:.edu "powered by phpbb" site:.edu "powered by punbb" site:.edu "/quicksilver/" site:.edu "powered by quicksilver forums" site:.edu "index.php?a=forum" site:.edu "index.php?a=register" site:.edu "index.php?a=post&s=topic" site:.edu "/seoboard/" site:.edu "powered by seo-board" site:.edu "seoboard/index.php?a=vforum" site:.edu "index.php?a=vtopic" site:.edu "/index.php?a=register" site:.edu "powered by smf 1.1.5? site:.edu "index.php?action=register" site:.edu "/index.php?board" site:.edu "powered by ubb.threads" site:.edu "ubb=postlist" site:.edu "ubb=newpost&board=1? site:.edu "ultrabb" site:.edu "view_forum.php?id" site:.edu "new_topic.php?" site:.edu "login.php?register=1? site:.edu "powered by vbulletin" site:.edu "vbulletin/register.php" site:.edu "/forumdisplay.php?f=" site:.edu "newreply.php?do=newreply" site:.edu "newthread.php?do=newthread" site:.edu "powered by bbpress" site:.edu "bbpress/topic.php?id" site:.edu "bbpress/register.php" site:.edu "powered by the unclassified newsboard" site:.edu "forum.php?req" site:.edu "forum.php?req=register" site:.edu "/unb/" site:.edu "powered by usebb forum software" site:.edu "/usebb/" site:.edu "topic.php?id" site:.edu "panel.php?act=register" site:.edu "a product of lussumo" site:.edu "comments.php?discussionid=" site:.edu "/viscacha/" site:.edu "forum.php?s=" site:.edu "powered by viscacha" site:.edu "/viscacha/register.php" site:.edu "/post?id=" site:.edu "post/printadd?forum" site:.edu "community/index.php" site:.edu "community/forum.php?" site:.edu "community/register.php" site:.edu "powered by xennobb" site:.edu "hosted for free by zetaboards" site:.edu "powered by yaf" site:.edu "yaf_rules.aspx" site:.edu "yaf_topics" site:.edu "postmessage.aspx" site:.edu "register.aspx" site:.edu "post/?type" site:.edu "action=display&thread" site:.edu "index.php" site:.edu "index.php?fid" site:.edu inurl:guestbook inurl: edu guestbook inurl:edu Link:http://worldwidemart.com/scripts/ inurl:"guestBook.aspx" site:edu inurl:guest inurl:guest site:edu inurl:guestbook.html inurl:guestbook.php inurl:kg.php inurl:guestbook.html site:.edu inurl:guestbook.php site:.edu inurl:?agbook=addentry inurl:?show=guestbook&do=add inurl:?t=add inurl:GuestBook/addentry.php inurl:Myguestbook/index.asp inurl:addentry.html inurl:addentry.php inurl:addguest.cgi inurl:addguest.htm inurl:addguest.html inurl:addguest.php inurl:addguest.shtml inurl:apeboard.cgi inurl:apeboard_plus.cgi inurl:apeboard_plus.cgi?command= inurl:ardguest.php?do= inurl:aska.cgi inurl:aspboardpost.asp?id= inurl:bbs.cgi inurl:bbs.cgibbs.cgi? inurl:bbs.cgibbs.cgi?id= inurl:bbs.cgibbs.cgi?mode= inurl:bbs.cgibbs.cgi?page= inurl:bbs.cgibbs.cgi?room= inurl:bbs.cgibbs.php inurl:bbs.cgibbs/mm.php inurl:bbs.cgibbs_inaka.jsp inurl:board.cgi?id= inurl:board.cgi?mode= inurl:book.php inurl:c-board.cgi?cmd= inurl:cbbs.cgi inurl:cbbs.cgi?mode= inurl:cbbs.cgi?mode=new inurl:cf.cgi?mode= inurl:cgi-bin/config.pl inurl:cgi-bin/gbook.cgi inurl:cgi/gbook.cgi inurl:clever.cgi inurl:clever.cgi?mode= inurl:clever.cgi?page= inurl:clip.cgi inurl:combbs.cgi?mode= inurl:comment.htm inurl:comment.php inurl:comment.php?id= inurl:comment_reply.php?com_itemid= inurl:commentaire.php?id= inurl:comments.asp inurl:comments.htm inurl:comments.html inurl:comments.php inurl:comments.php?id= inurl:crazyguestbook.cgi?db= inurl:custombbs.cgi inurl:custreg.asp?action= inurl:cutebbs.cgi inurl:dcguest.cgi?action=add_form inurl:default.asp inurl:default.asp?action= inurl:diary.cgi?mode= inurl:e-guest_sign.pl inurl:e_sign.asp inurl:easyguestbookentry inurl:eguestbook.cgi?Sign inurl:eintrag.htm inurl:eintrag.html inurl:eintrag.php inurl:eintrag.php?id= inurl:eintrag1.php inurl:eintrag_neu.php inurl:eintragen.asp inurl:eintragen.htm inurl:eintragen.html inurl:eintragen.php inurl:eintragen.php?menuid= inurl:eintragen.pl inurl:emfsend.cgi?sc= inurl:entry.php inurl:entry.php?id= inurl:epad.cgi inurl:fantasy.cgi inurl:firebook.cgi inurl:form.php inurl:forum_posts.asp inurl:forum_topics.asp inurl:fpg.cgi inurl:fsguest.html inurl:fsguestbook.html inurl:g_book.cgi inurl:gaeste.php? inurl:gaestebuch.cgi inurl:gaestebuch.htm inurl:gaestebuch.html inurl:gaestebuch.php inurl:gaestebuch.php?action= inurl:gaestebuch.php?action=entry inurl:gaestebuch/ inurl:gaestebuch_lesen.php inurl:gastbok.php inurl:gastbuch.php inurl:gastenboek.html inurl:gastenboek.php inurl:gb.asp inurl:gb.cfm?bookID= inurl:gb.cgi?id= inurl:gb.php inurl:gb.php?action= inurl:gb.php?id= inurl:gb.php?tmpl= inurl:gb.php?user= inurl:gb/ inurl:gb/addrec.php inurl:gb_list.asp inurl:gb_sign.asp inurl:gbadd.php inurl:gbadd.php?action=new&interval=1 inurl:gbaddentry.php inurl:gbook.asp inurl:gbook.html inurl:gbook.php inurl:gbook.php?a= inurl:gbook.php?action= inurl:gbook.php?id= inurl:gbook.php?page=1 inurl:gbook.php?show= inurl:gbook/?page=1 inurl:gbook/gbook.php inurl:gbook2.php inurl:gbook?sign= inurl:gbooksign.asp inurl:gbserver inurl:gbuch.php inurl:gjestebok.php inurl:gjestebok/index.asp inurl:gjestebok/index.pl inurl:gjestebok3.asp inurl:gjesteboken.asp inurl:glight.cgi inurl:goto.php?msgadd inurl:gst_sign.dbm inurl:gstbk_add.php?sid= inurl:guest.asp inurl:guest.cfm inurl:guest.cgi inurl:guest.cgi?action=add_form inurl:guest.cgi?handle= inurl:guest.cgi?pageid= inurl:guest.cgi?site= inurl:guest.htm inurl:guest.html inurl:guest.php inurl:guest.pl inurl:guest/gbook.php inurl:guest_book.htm inurl:guest_book.html inurl:guestadd.html inurl:guestbook inurl:guestbook-add.html inurl:guestbook.asp inurl:guestbook.asp?action= inurl:guestbook.asp?mode= inurl:guestbook.asp?sent= inurl:guestbook.aspx inurl:guestbook.cfm inurl:guestbook.cgi inurl:guestbook.cgi?action= inurl:guestbook.cgi?action=add&aspm1= inurl:guestbook.cgi?id= inurl:guestbook.cgi?start= inurl:guestbook.htm inurl:guestbook.html inurl:guestbook.html?page= inurl:guestbook.mv?parm_func= inurl:guestbook.php inurl:guestbook.php.cgi?gbook= inurl:guestbook.php? inurl:guestbook.php?act= inurl:guestbook.php?action= inurl:guestbook.php?action=add inurl:guestbook.php?cmd= inurl:guestbook.php?do= inurl:guestbook.php?form= inurl:guestbook.php?id= inurl:guestbook.php?inputmask= inurl:guestbook.php?lang= inurl:guestbook.php?mode= inurl:guestbook.php?new_message= inurl:guestbook.php?new_message=1 inurl:guestbook.php?page= inurl:guestbook.php?pg= inurl:guestbook.php?sn= inurl:guestbook.pl inurl:guestbook.pl?action= inurl:guestbook.pl?action=add inurl:guestbook.pl?action=form inurl:guestbook/add.html inurl:guestbook/comment.php?gb_id= inurl:guestbook/index.asp inurl:guestbook/php/entry.php inurl:guestbook/post/ inurl:guestbook2.asp?l= inurl:guestbook_add.php inurl:guestbook_new.php inurl:guestbook_sign.php inurl:guestbook_sign.php?oscsid= inurl:guestbookadd.asp inurl:guestbookvip.php inurl:guestbookvip.php?memid= inurl:guestbox.php?anfangsposition= inurl:guestform.php inurl:guestform.php?gbid=cdg inurl:guestsaisie.php inurl:honey.cgi inurl:honey.cgi?mode= inurl:ibbs.cgi inurl:ibbs.cgi?H=tp&no=0 inurl:ibbs.cgi?page= inurl:imgboard.cgi inurl:index.php3?add=1 inurl:index.php?gbname= inurl:index.php?id=...&item_id= inurl:index.php?p=guestbook<=NL&action=add inurl:index.php?page=guestbook_read inurl:joyful. inurl:joyful.cgi inurl:joyfulyy.cgi inurl:jsguest.cgi?action=new inurl:kakikomitai.cgi? inurl:kb_pc.cgi inurl:kboard.cgi inurl:kbpost.htm inurl:kerobbs.cgi inurl:kerobbs.cgi?page= inurl:kiboujoken.htm inurl:kniha.php inurl:krbbs.cgi inurl:ksgosci.php inurl:ksiega.php inurl:ktaiufo.cgi inurl:light.cgi inurl:light.cgi?page= inurl:mboard.php inurl:messageboard.html inurl:messages.php?1=1&agbook=addentry inurl:mezase.cgi inurl:minibbs.cgi inurl:minibbs.cgi?log= inurl:mkakikomitai.cgi inurl:msboard.cgi?id= inurl:msgboard.mv?parm_func= inurl:msgbook.cgi?id= inurl:new.php?forum_id= inurl:new_message.asp inurl:newdefault.asp inurl:newdefault.asp?DeptID= inurl:news.php?subaction= inurl:patio.cgi inurl:petit.cgi inurl:phello.cgi inurl:post.asp inurl:post.htm inurl:post.html inurl:post_comment.php?u= inurl:post_comment.php?w= inurl:postcards.php?image_id= inurl:print_sec_img.php inurl:purybbs.cgi inurl:purybbs.cgi?page= inurl:rabook.php inurl:rbook.cgi inurl:rbook.cgi?page= inurl:read.cgi/gboy/ inurl:read.cgi?board= inurl:reg.php?pid= inurl:resbbs.cgi inurl:schedule.cgi?form= inurl:sendmessage.asp inurl:showguestbook.php?linkid= inurl:sicharou.cgi inurl:sign.asp inurl:sign.asp?PagePosition= inurl:sign.html inurl:sign.php inurl:sign_guestbook.asp inurl:sign_guestbook_form.asp inurl:signbook.cfm inurl:signerbok.asp inurl:signgb.php inurl:signguestbook.asp inurl:signguestbook.html inurl:signguestbook.php inurl:signup.php inurl:simbbs.cgi inurl:skriv.html inurl:skriv_i_gaestebogen.html inurl:spguest.cgi?id= inurl:stlfbbs.cgi inurl:submit.asp inurl:submit.html inurl:submit.php inurl:submit.pl inurl:suggest.php?action= inurl:sunbbs.cgi?mode= inurl:tnote.cgi inurl:treebbs.cgi inurl:ttboard.cgi?act= inurl:upb.cgi inurl:upbbs.cgi inurl:user.php inurl:view.php?id=9&action=new inurl:write.asp inurl:write.php?uid= inurl:wwwboard.cgi inurl:yapgb.php?action= inurl:yuu-fantasy.cgi inurl:yybbs.cgi inurl:zboard.php?id= inurl:0815guestbooks.de inurl:100pro-gaestebuch.de/gbserver/ inurl:12book.de/gaestebuch inurl:Gb/Sign_Guestbook.asp inurl:Gbook/Sign_Guestbook.asp inurl:GuestBook/gst_sign.dbm inurl:Guestbook/Sign_Guestbook.asp inurl:Guestbook_eintrag.htm inurl:Sign_Guestbook.asp inurl:addbook.cgi inurl:addentry inurl:addguest inurl:addguest.html inurl:addguest.php inurl:addguestGB2.cgi inurl:addmessage inurl:apeboard inurl:bbs inurl:burning inurl:epad inurl:feedbook.de inurl:flash_gb9.php?id= inurl:flf-book.de inurl:free-guestbooks.de/gbserver/ inurl:freeguestbook.de/addbook.cgi? inurl:freeguestbook.de/readbook.cgi? inurl:freeguestbook4you.de gaestebuch-umsonst.ws inurl:gaestebuch. inurl:gaestebuch.007box.de inurl:gaestebuch.php inurl:gaestebuch.php? inurl:gaestebuch/neu.php inurl:gaestebuch4u.de inurl:gaestebuchking.de inurl:gastbuch.php inurl:gastbuch.php3 inurl:gastbuch.php?id= inurl:gb.cgi inurl:gb.php?user= inurl:gb.webmart.de inurl:gb.webmart.de/gb.cfm?id= inurl:gb/addguest.html inurl:gb/guest.pl inurl:gb/sign.html inurl:gb2003.de inurl:gb_eintrag.php? inurl:gbook.cgi inurl:gbook.tv inurl:gbook/addguest.html inurl:gbook/guest.pl inurl:gbook/sign.html inurl:gbserver.de inurl:gratis-gaestebuch.de inurl:gratis-gaestebuch.eu/firebook.cgi? inurl:gst_sign.dbm inurl:guessbook/sign.html inurl:guest. inurl:guest.pl inurl:guest_book/guest.pl inurl:guestb inurl:guestbook inurl:guestbook-free.com/books inurl:guestbook-free.com/books2 inurl:guestbook.cgi inurl:guestbook.onetwomax.de inurl:guestbook/a=sign inurl:guestbook/addguest.html inurl:guestbook/guest.pl inurl:guestbook/sign.html inurl:guestbook24.com/gastbuch.php inurl:guestbook24.eu inurl:guestbook4you.de/gb.php? inurl:iboox.com inurl:multiguestbook.com inurl:my-gaestebuch.de inurl:netguestbook.com inurl:new.html#sign inurl:power-guestbook.de inurl:regsign.cgi inurl:sign.fcgi inurl:sign.html inurl:sign_book.cgi inurl:wgbsign.html site:com “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "post a comment" site:edu “powered by BlogEngine.NET” "post a comment" site:org “powered by BlogEngine.NET” "post a comment" site:gov “powered by BlogEngine.NET” "post a comment" site:com “powered by BlogEngine.NET” "Leave a comment" site:org “powered by BlogEngine.NET” "Leave a comment" site:edu “powered by BlogEngine.NET” "Leave a comment" site:gov “powered by BlogEngine.NET” "Leave a comment" site:com “powered by BlogEngine.NET” "add a comment" site:org “powered by BlogEngine.NET” "add a comment" site:edu “powered by BlogEngine.NET” "add a comment" site:gov “powered by BlogEngine.NET” "add a comment" site:com “powered by BlogEngine.NET” inurl:blog "post a comment" site:edu “powered by BlogEngine.NET” inurl:blog "post a comment" site:org “powered by BlogEngine.NET” inurl:blog "post a comment" site:gov “powered by BlogEngine.NET” inurl:blog "post a comment" site:com “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:org “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:edu “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:gov “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:com “powered by BlogEngine.NET” inurl:blog "add a comment" site:org “powered by BlogEngine.NET” inurl:blog "add a comment" site:edu “powered by BlogEngine.NET” inurl:blog "add a comment" site:gov “powered by BlogEngine.NET” inurl:blog "add a comment" site:edu "powered by BlogEngine.NET" site:com "powered by BlogEngine.NET" site:gov "powered by BlogEngine.NET" site:org "powered by BlogEngine.NET" “powered by BlogEngine.NET” site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:edu "Powered by BlogEngine.NET 1.4.5.0" site:com "Powered by BlogEngine.NET 1.4.5.0" site:gov "Powered by BlogEngine.NET 1.4.5.0" site:org "Powered by BlogEngine.NET 1.4.5.0" “Powered by BlogEngine.NET 1.4.5.0” site:com “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "post a comment" site:edu “powered by expressionengine” "post a comment" site:org “powered by expressionengine” "post a comment" site:gov “powered by expressionengine” "post a comment" site:com “powered by expressionengine” "Leave a comment" site:org “powered by expressionengine” "Leave a comment" site:edu “powered by expressionengine” "Leave a comment" site:gov “powered by expressionengine” "Leave a comment" site:com “powered by expressionengine” "add a comment" site:org “powered by expressionengine” "add a comment" site:edu “powered by expressionengine” "add a comment" site:gov “powered by expressionengine” "add a comment" site:com “powered by expressionengine” inurl:blog "post a comment" site:edu “powered by expressionengine” inurl:blog "post a comment" site:org “powered by expressionengine” inurl:blog "post a comment" site:gov “powered by expressionengine” inurl:blog "post a comment" site:com “powered by expressionengine” inurl:blog "Leave a comment" site:org “powered by expressionengine” inurl:blog "Leave a comment" site:edu “powered by expressionengine” inurl:blog "Leave a comment" site:gov “powered by expressionengine” inurl:blog "Leave a comment" site:com “powered by expressionengine” inurl:blog "add a comment" site:org “powered by expressionengine” inurl:blog "add a comment" site:edu “powered by expressionengine” inurl:blog "add a comment" site:gov “powered by expressionengine” inurl:blog "add a comment" site:edu "powered by expressionengine" site:com "powered by expressionengine" site:gov "powered by expressionengine" site:org "powered by expressionengine" “powered by expressionengine” inurl:"title=Dyskusja_u%C5%BCytkownika:" inurl:"/wiki/index.php" "Theme: Strasa - Mono" wiki "you only need to fill in when" categorywiki "This is an alphabetical list of pages you can read on this server." "Login/Register" inurl:"title=%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:" inurl:"title=U%C5%BEivatel_diskuse:" "Theme: Fluid Index by Your Index" inurl:"title=Discussion_utilisateur:" "Welcome to MoinMoin. You will find here the help pages for the wiki system itself." "Wiki:About" inurl:"Speciaal:Aanmelden" wiki inurl:"title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:" inurl:"CategoryWiki" inurl:"Especial:Entrar" wiki inurl:"title=Discussioni_utente:" inurl:"/mediawiki/index.php" "The wiki, blog, calendar, and mailing list" inurl:"Istimewa:Masuk_log" wiki inurl:"title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:" inurl:"title=%E0%B8%84%E0%B8%B8%E0%B8%A2%E0%B9%80%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%A7%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%8A%E0%B9%89:" inurl:"title=Usu%C3%A1rio_Discuss%C3%A3o:" inurl:"Speciale:Entra" wiki "Powered by WikkaWiki" inurl:"tiki-register.php" "dokuwiki.txt" "Tema: Fivealive - Lemon" inurl:"%E7%89%B9%E5%88%A5:%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3" wiki Categories PageIndex Recent Changes Recently Commented "Login/Register" "" "" "Powered by Tikiwiki CMS/Groupware" inurl:"title=Utilizador_Discuss%C3%A3o:" "Tema: Fivealive" "This page was last modified on" "wiki" inurl:"Specjalna:Zaloguj" wiki "Thanks for installing Wikka! This wiki runs on version" inurl:"http://wikka." "Theme: Coelesce" "Powered By MediaWiki" inurl:wiki "Theme: Fivealive - Kiwi" inurl:"Utente:" wiki "recentchanges" "findpage" "helpcontents" inurl:"Sp%C3%A9cial:Connexion" wiki inurl:"Pengguna:" wiki "MoinMoin Powered" "Python Powered" inurl:"title=%E0%B4%89%E0%B4%AA%E0%B4%AF%E0%B5%8B%E0%B4%95%E0%B5%8D%E0%B4%A4%E0%B4%BE%E0%B4%B5%E0%B4%BF%E0%B4%A8%E0%B5%8D%E0%B4%B1%E0%B5%86_%E0%B4%B8%E0%B4%82%E0%B4%B5%E0%B4%BE%E0%B4%A6%E0%B4%82:" inurl:"U%C5%BCytkownik:" wiki inurl:"Speciel:Log_p%C3%A5" wiki "Powered By MediaWiki" "Powered By MediaWiki" inurl:wiki "what links here" "related changes" "special pages" inurl:Special:Whatlinkshere "There is currently no text in this page, you can search..." "Powered by wikkawiki" inurl:wiki/RecentlyCommented "pageindex" "recentchanges" "recentlycommented" "you only need to fill in when" categorywiki "MoinMoin Powered" "MoinMoin Powered" "Python Powered" "recentchanges" "findpage" "helpcontents" "powered by tikiwiki" "powered by tikiwiki" inurl:tiki-index.php Powered by TikiWiki CMS/Groupware v2 inurl:tiki-register.php

    Благодаря Всемирной паутине, почти любой может дать информацию в Интернете в приятном для глаз и пригодном для широкого распространения виде. Вы несомненно путешествовали по Интернету и видели другие сайты, и теперь вероятно знаете, что пугающие сокращения типа "HTTP" и "HTML" - просто своеобразные сокращения для "Веб" и "способ выражения информацим в Интернете". Возможно у Вас уже есть некоторый опыт представления информации в Интернете.

    Интернет доказал, что является идеальной средой для распределения информации, как видно по его огромной популярности и масштабного развития. Хотя кое-кто подвергает сомнению полезность Интернета и приписывают ее широкое развитие и популярность главным образом навязчивой рекламе, Интернет бесспорно является важным средством представления всевозможных видов информации. Мало того, что существует множество услуг по предоставлению самой свежей информации (новости, погода, спортивные события в реальном времени) и материалов справочного характера в электронном виде, предлагаются также значительные объемы данных другого рода. Налоговое управление США, которое распространило все свои бланки налоговых деклараций в 1995 году и другую информацию через Всемирную паутину, недавно призналось о получении писем от поклонников своего Веб-сайта. Кто бы мог подумать, что Налоговое управление когда-нибудь будет получать письма от поклонников? Это произошло не от того, что его сайт был хорошо оформлен, а потому что он оказался по-настоящему полезным инструментом для тысяч, а возможно и миллионов людей.

    Что делает Веб уникальным и таким привлекательным информационным сервисом? Прежде всего тем, что он предоставляет интерфейс гиперсреды для данных. Вспомните дисковод жесткого диска своего компьютера. Как правило, данные выражаются в линейном виде, аналогично файловой системе. Например, Вы имеете ряд папок, а внутри каждой папки находятся либо документы либо другие папки. Веб использует разную парадигму для выражения информации называемой гиперсредой. Гипертекстовый интерфейс состоит из документа и связей. Связи - это слова, на которые кликают, чтобы увидеть другие документы или отыскать другие виды информации. Веб расширяет концепцию гипертекста, включив другие типы носителей, например графику, звуки, видео (отсюда имя "гиперсреда"). Выделение текста или графики на документе позволяет увидеть связанную информацию о выделенном элементе в любом количестве форм.

    Почти каждый человек может извлечь выгоду из этого простого и уникального способа представления и распределения информации, начиная от академиков, которые хотят немедленно использовать данные вместе со своими коллегами, и кончая деловыми людьми, которые дают информацию о своей компании всем желающим. Однако, хотя дать информацию чрезвычайно важно, в последние несколько лет многие ощутили, что не менее важным процессом является получение информации.

    Хотя Веб предоставляет для информации уникальный интерфейс гиперсреды, имеется много других эффективных способов распределения данных. Например, сетевые услуги типа Протокола передачи файлов (FTP) и группа новостей "Gopher" существовали намного раньше появления Всемирной паутины. Электронная почта была первичной средой для связи и обмена информацией по Интернету и большинством других сетей почти с самого начала функционирования этих сетей. Почему Интернет стал таким популярным способом распределения информации? Мультимедийный аспект Интернета внес ощутимый вклад в его небывалый успех, но для того, чтобы Интернет стал наиболее эффективным он должен быть интерактивным.

    Без способности получать ввод от пользователей и давать информацию, Веб был бы полностью статической средой. Информация была бы доступна только в формате, определенном автором. Это подорвало бы одну из вычислительных возможностей вообще: интерактивную информацию. Например, вместо того, чтобы принуждать пользователя к просмотру нескольких документов, как если бы он или она просматривали книгу или словарь, будет лучше позволить пользователю определить ключевые слова по интересующей их тематике. Пользователи могут настраивать представление данных, а не полагаться на жесткую структуру, определенную поставщиком содержимого.

    Термин "сервер Веб" может ввести в заблуждение, потому что он может относиться и к физической машине и программному обеспечению, используемому в ней для взаимодействия с Интернет-браузерами. Когда браузер запрашивает заданный адрес Веб, он сначала подключается к машине через Интернет, посылая программному обеспечению Веб-сервера запрос о документе. Это программное обеспечение работает непрерывно, ожидая поступления таких запросов и отвечая соответствующим образом.

    Хотя серверы могут посылать и получать данные, у самого сервера функциональные возможности ограничены. Например, наиболее примитивный сервер может только отослать требуемый файл на браузер. Сервер обычно не знает, что делать с тем или иным дополнительным вводом. Если Интернет-провайдер не сообщает серверу, как обработать такую дополнительную информацию, вероятнее всего сервер проигнорирует ввод.

    Для того, чтобы сервер смог выполнять и другие операции, помимо поиска и пересылки файлов на Интернет-браузер, нужно знать, как расширить функциональные возможности сервера. Например, сервер Веб не может производить поиск в базе данных, на основе ключевого слова, введенного пользователем, и возвращать несколько документов соответствия, если такая способность не была каким-то образом запрограммирована для сервера.

    Что такое CGI?

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

    Обычно, для расширения возможностей сервера, Вам пришлось бы самому модифицировать сервер. Такое решение нежелательно, потому что это требует понимания нижнего уровня сетевого программирования по протоколу Интернета. Это также требовало бы редактирования и перекомпиляции исходного кода сервера или записи пользовательского сервера для каждой задачи. Допустим, нужно расширить возможности сервера так, чтобы он действовал как шлюз Web-to-e-mail (от Веб к эл.почте), отбирая информацию, введенную пользователем, из браузера и посылая ее по электронной почте другому пользователю. В сервер пришлось бы вставить код для анализа ввода от браузера, пересылки бы его по электронной почте другому пользователю, и пересылке ответа назад в браузер через сетевое соединение.

    Во-первых, такая задача требует наличия доступа к коду сервера, что не всегда возможно.

    Во-вторых, это трудно и требует обширных технических знаний.

    В-третьих, это применимо только для конкретного сервера. Если нужно переместить ваш сервер на другую платформу, придется запустить или по крайней мере потратить много времени, занимаясь переносом кода на эту платформу.

    Почему CGI?

    CGI предлагает переносимое и простое решение этих проблем. Протокол CGI определяет стандартный способ для программ, чтобы связаться с сервером Веб. Без каких-либо специальных знаний, можно записать программу на любом машинном языке, который сопрягается и связывается с сервером Веб. Эта программа будет работать со всеми серверами Веб, которые понимают протокол CGI.

    Связь CGI осуществляется стандартным вводом и выводом, что означает, что, если Вы знаете, как печатать и читать данные, используя свой язык программирования, можно написать приложение сервера Веб. Помимо анализа ввода и вывода, программирование приложений CGI почти эквивалентно программированию любого другого приложения. Например, для программирования программы "Hello, World!", используются функции печати вашего языка и формат, определенный для программ CGI, чтобы напечатать соответствующее сообщение.

    Выбор языка програмирования

    Поскольку CGI - универсальный интерфейс, Вы не ограничены каким-либо определенным машинным языком. Часто задают важный вопрос: какие языки программирования можно использовать для программирования CGI? Вы можете использовать любой язык, который позволяет делать следующее:

    • Печатать в стандартном выводе
    • Читать со стандартного ввода
    • Читать с переменных режимов

    Почти все языки программирования и много языков описания сценария выполняют эти три действия, и можно использовать любой из них.

    Языки подпадают под один из следующих двух классов: транслируемый и интерпретируемый. Транслируемый язык -например, C или C++ обычно меньше и быстрее, в то время как интерпретируемые языки, такие как Perl или Rexx, иногда требуют загрузки большого интерпретатора после запуска. Дополнительно, Вы можете распределять двоичные коды (код, транслируемый в машинный язык) без исходного кода, если ваш язык транслируемый. Распределение интерпретируемых сценариев обычно означает распределение исходнго кода.

    Перед тем, как выбрать язык, сначала нужно рассмотреть свои приоритеты. Нужно оценить выгоды от скорости и эффективности одного языка программирования с легкостью программирования другого. Если у Вас есть желание изучить другой язык, вместо использования того, который Вы уже знаете, тщательно взвести преимущества и недостатки обоих языков.

    Два наиболее часто используемых языка для программирования CGI - это C и Perl (оба из которых рассматриваются в настоящей книге). У обоих имеются четкие преимущества и недостатки. Perl - язык очень высокого уровня, и в то же время мощный язык, особенно пригодный для синтаксического анализа текста. Хотя легкость использования, гибкость, и мощность делает его языком, привлекательным для программирования CGI, его относительно большой размер и более медленная работа иногда делает его неподходящим для некоторых приложений. Программы C меньше по размеру, более эффективны и обеспечивают контроль за системой более низкого уровня, но более сложны для программирования, не имеют легких встроенных подпрограмм обработки текста, и их труднее отладить.

    Какой язык является наиболее подходящим для программирования CGI? Тот, который Вы считаете для себя более удобным с точки зрения программирования. Оба одинаково эффективны для программирования приложений CGI, и с надлежащими библиотеками, оба имеют схожие возможности. Однако, если Вы имеете труднодоступный сервер, можно использовать меньшие транслируемые программы C. Если Вы должны быстро написать приложение, которое требует значительной работы по обработке текста, можно вместо него использовать Perl.

    Предостережения

    Имеются некоторые важные альтернативы к приложениям CGI. Много серверов теперь включают API-программирование, которое облегчает программирование прямых расширений сервера в противоположность отдельным приложениям CGI. Серверы API обычно более эффективны, чем программы CGI. Другие серверы включают встроенные функциональные возможности, которые могут обрабатывать специальные элементы без CGI, например, сопряжение баз данных. И наконец, некоторые приложения могут быть обработаны некоторыми новыми клиентскими (а не серверными) технологиями типа Java. Быстро ли устареет CGI в условиях таких быстрых изменений в технологии,?

    Вряд ли. CGI имеет несколько преимуществ перед более новыми технологиями.

    • Он универсален и переносим. Вы можете написать приложение CGI, используя практически любой язык программирования на любой платформе. Некоторые из альтернатив, такие как API сервера, ограничивают Вас некоторыми языками и намного сложны для изучения.
    • Маловероятно что, клиентские технологии типа Java, заменят CGI, потому что имеются некоторые приложения, для которых серверные приложения намного лучше подходят для выполнения.
    • Многие из ограничений CGI - это ограничения HTML или HTTP. По мере развития стандартов Интернета в целом, развиваются и возможности CGI.

    Резюме

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

    Глава 2. Основы

    Несколько лет назад, я создавал для колледжа в Гарварде страницу, куда бы можно было представлить свои комментарии о них. В то время, Интернет был молод, а документации было мало. Я, подобно многим другим, опирался на краткую документацию и систему программирования, созданную другими, чтобы научиться программированию CGI. Хотя этот метод изучения потребовал определенного поиска, множества экспериментов, и создавал много вопросов, он был очень эффективным. Настоящая глава - плод моей работы с CGI на ранних этапах (с несколькими уточнениями, разумеется).

    Хотя для того, чтобы, полностью понять общешлюзовой интерфейс и достичь мастерства при работе с ним требуется некоторое время, сам протокол довольно прост. Любой человек, у которого есть некоторые основные навыки программирования, и который знаком с Веб, может быстро научиться программированию довольно сложных приложений CGI так же как я и другие научились этому несколько лет назад.

    Цель этой главы состоит в том, чтобы представить основы CGI в комплексном, хотя и сжатом виде. Каждая концепция, рассматриваемая здесь, подробно представлена в последующих главах. Однако, после изучения этой главы, можно сразу же начать программирование приложений CGI. Как только Вы достигнете этого уровня, можно изучить тонкости CGI, либо прочитав остальную часть этой книги, либо просто экспериментируя самостоятельно.

    Вы можете свести программирование CGI к двум задачам: к получению информации от браузера Веб и отсылке информации назад на браузер. Это делается достаточно интуитивно, как только Вы усвоите обычное использование приложений CGI. Часто пользователю предлагают заполнить какую-либо форму, например, вставить свое имя. Как только пользователь заполняет форму и нажимает Enter, эта информация посылается программе CGI. Программа CGI должна затем преобразовать эту информацию в то, что она понимает, соответственно обработать ее, и затем послать назад браузеру, будь то простое подтверждение или результат поиска в многоцелевой базе данных.

    Другими словами, для программирования CGI требуется понять, как получить ввод от Интернет-браузера и как отослать вывод назад. Что происходит между стадиями ввода и вывода программы CGI, зависит от цели разработчика. Вы обнаружете, что главная сложность программирования CGI заключается в этой промежуточной стадии; после того, как Вы узнаете, как работать с вводом и выводом, этого будет, по существу, достасточно, чтобы стать разработчиком CGI.

    В настоящей Главе, Вы изучите принципы, лежащие в основе ввода и вывода CGI, а также другие элементарные навыки, которые потребуются, чтобы записывать и использовать CGI, включая такие моменты, как создание форм HTML и присвоение имени вашим программам CGI. В данной главе рассматриваются следующие темы:

    • Традиционная программа " Hello, World!";
    • Вывод CGI: отсылка информации назад для отображения в Интернет-браузере;
    • Конфигурирование, установка, и выполнение приложения. Вы узнаете о различных платформах и серверах Веб;
    • Ввод CGI: интерпретация информации, посланной браузером Веб. Ознакомление с некоторыми полезными библиотеками программирования для анализа такого ввода;
    • Простой пример: он охватывает все уроки данной главы;
    • Стратегия программирования.

    Из-за характера данной главы, я только слегка касаюсь некоторых тем. Не волнуйтесь; все эти темы рассматриваются гораздо глубже в других главах.

    Hello, World!

    Вы начинаете с традиционной вводной задачи программирования. Вы напишете программу, которая отобразит "Hello, World!" на вашем браузере Веб. Прежде, чем написать эту программу, Вы должны понять, какую информацию браузер Веб ожидает получить от программ CGI. Вы также должны знать, как выполнить эту программу, так чтобы увидеть ее в действии.

    CGI независит от языка, так что Вы можете реализовать эту программу на любом языке. Здесь используется несколько различных языков, чтобы продемонстрировать независимость каждого языка. В языке Perl, программа " Hello,World!" показана в листинге 2.1.

    Листинг 2.1. Hello, World! в Perl. #!/usr/local/bin/perl # Hello.cgi - Моя первая программа CGI print "Content-Type: text/html\n\n"; print " \n"; print "Hello, World!"; print "\n"; print "\n"; print "

    Hello, World!

    \n"; print " \n";

    Сохраните эту программу как hello.cgi, и установите ее в соответствующем месте. (Если Вы не уверены, где оно находится, не беспокойтесь; Вы узнаете это в разделе "Установка и выполнение программы CGI " ниже в данной главе.) Для большинства серверов нужный каталог называется cgi-bin. Теперь, вызовите программу из вашего браузера Веб. Для большинства, это означает открыть следующий универсальный указатель ресурса (URL):

    http://hostname/directoryname/hello.cgi

    Hostname - имя вашего сервера Веб, и directoryname - каталог, в который Вы помещаете hello.cgi (вероятно cgi-bin).

    Разбиение hello.cgi

    Следует отметить несколько моментов относительно hello.cgi.

    Во-первых, вы используете простые команды печати. Программы CGI не требуют никаких специальных дескрипторов файла или описателей вывода. Чтобы послать вывод браузеру, просто печатают на stdout.

    Во-вторых, обратите внимание на то, что содержание первого оператора печати (Content-Type: text/html) не появляется на вашем браузере Веб. Вы можете отослать любую информацию, по Вашему усмотрению, назад на браузер (страницу HTML, графику или звук), но сначала, нужно сообщить браузеру какого вида данные вы ему посылаете. Эта строка сообщает браузеру какой вид информации ожидать - в данном случае, страницу HTML.

    В-третьих, программа называется hello.cgi. Не всегда нужно использовать расширение.cgi с именем вашей программы CGI. Хотя исходный код для многих языков также использует расширение.cgi, оно не используется для обозначения типа языка, а является для сервера способом идентификации файла как исполняемого файла, а не графического файла, файла HTML или текстового файла. Серверы часто конфигурируются так, чтобы только попытаться выполнить те файлы, которые имеют это расширение, отображая содержание всех других. Хотя использование расширения.cgi не обязательно, это все еще считается хорошей практикой.

    В общем, hello.cgi состоит из двух основных частей:

    • сообщает браузеру какую информацию ожидать (Content-Type: text/html)
    • сообщает браузеру, что отобразить (Hello, World!)

    Hello, World! в C

    Чтобы показать независимость программ CGI от языков, в листинг 2.2 показан эквивалент программы hello.cgi , написанной в C.

    Листинг 2.2. Hello, World! в C. /* hello.cgi.c - Hello, World CGI */ #include int main() { printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf("Hello, World!\n"); printf("\n"); printf("\n"); printf("

    Hello, World!

    \n"); printf(" \n"); }

    Примечание

    Обратите внимание на то, что версия Perl hello.cgi использует Content-Type print ": text/html\n\n "; В то время как версия C использует Printf (" Content-Type: text/html\r\n\r\n ");

    Почему Perl печатает операторный конец с двумя символами новой строки (\n), в то время как C printf заканчивается двумя символами возврата каретки и новой строки(\r\n)?

    Формально, заголовки (весь вывод перед пустой строкой) как предполагается, будут отделены символом возрата каретки и новой строки. К сожалению, на машинах DOS и Windows, Perl транслирует \r как другую новую строку, а не как перевод каретки.

    Хотя исключение \rs в Perl технически неправильно, она будет работать почти во всех протоколах и так же переноситься всеми платформами. Поэтому, во всех примерах Perl в этой книге я использую новую строку, отделяющие заголовки, а не символы возврата каретки и новой строки.

    Соответствующее решение этой проблемы представлено в Главе 4, "Вывод".

    Ни серверу Веб, ни браузеру не важно, какой язык используется для записи программы. Хотя каждый язык имеет преимущества и недостатки в качестве языка программирования CGI, лучше использовать язык, с которым Вам удобнее всего работать. (Более детально выбор языка программирования обсуждается в Главе 1 "Общешлюзовой интерфейс (CGI) ").

    Выведение CGI

    Теперь можно внимательнее изучить вопрос отправки информации на браузер Веб. Из примера " Hello, World!", видно, что браузеры Веб ожидают два набора данных: заголовок, который содержит информацию, например какую информацию отобразить (например Content-Type: line) и фактическую информацию (что отображается на браузере Веб). Эти два блока информации отделены пустой строкой.

    Заголовок называется заголовком HTTP. Он дает важные сведения об информации, которую браузер собирается получать. Имеются несколько различных типов заголовков HTTP, и наиболее универсальным является тот, который Вы использовали раньше: Content-Type: заголовок. Вы можете использовать различные комбинации заголовков HTTP, отделяя их символами возврата каретки и новой линии (\r\n). Пустая строка, отделяющая заголовок от данных, также состоит из возврата каретки и новой строки (почему нужны оба, кратко описано в предшествующем примечании и подробно в Главе 4). Вы узнаете о других заголовках HTTP в Главе 4; в данный момент Вы занимаетесь Content-Type: заголовок.

    Content-Type: заголовок описывает тип данных, которые возвращает CGI. Соответствующим форматом для этого заголовка является:

    Content-Type: subtype/type

    Где subtype/type - правильный тип многоцелевых расширений почты Интернета (MIME). Наиболее распространенным типом MIME является тип HTML: text/html. В таблице 2.1 приведено еще несколько распространненых типов MIME, которые будут рассмотрены; более полный перечень и анализ типов MIME приводится в Главе 4.

    Примечание

    MIME было первоначально изобретено для описания содержания тел сообщений почты. Оно стало довольно распространненым способом представления информации о Content-Type . Вы можете узнать больше о MIME в RFC1521. RFCs в Интернете обозначают "Просьбы о комментариях", которые представляют собой резюме решений, принятых группами в Интернете, пытающимися установить стандарты. Можно посмотреть результаты RFC1521 на следующем адресе: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

    Таблица 2.1. Некоторые общие типы MIME. Тип MIME Описание Text/html Язык разметки гипертекста (HTML) Text/plain Простые текстовые файлы Image/gif Графические файлы GIF Image/jpeg Сжатые графические файлы JPEG Audio/basic Аудио - файлы Sun *.au Audio/x-wav Файлы Windows *.wav

    После заголовка и пустой строки, Вы просто печатаете данные в нужном для Вас виде. Если Вы посылаете HTML, то печатайте теги HTML и данные к stdout после заголовка. Вы можете послать также графику, звук и другие двоичные файлы, просто печатая содержимое файла в stdout. Несколько примеров этого приведено в Главе 4.

    Установка и выполнение программы CGI

    Данный раздел несколько отклоняется от программирования CGI и рассказывает о конфигурирования вашего сервера Веб для использования CGI, об установке и выполнении программ. Вы ознакомитесь с различными серверами для различных платформ более или менее подробно, но Вам придется глубже изучить документацию своего сервера с целью нахождения оптимального варианта.

    Все серверы требуют пространства для файлов сервера и пространства для документов HTML. В настоящей книге, область сервера называется ServerRoot, а область документа - DocumentRoot. На машинах UNIX ServerRoot - обычно в /usr/local/etc/httpd/, а DocumentRoot - обычно в /usr/local/etc/httpd/htdocs/. Однако, это не имеет никакого значения для вашей системы, поэтому замените все ссылки на ServerRoot и DocumentRoot на ваши собственные ServerRoot и DocumentRoot.

    Когда Вы обращаетесь к файлам, используя ваш браузер Веб, Вы определяете файл в URL относительно DocumentRoot. Например, если адрес вашего сервера mymachine.org, то Вы обращаетесь к этому файлу со следующим URL: http://mymachine.org/index.html

    Конфигурирование сервера для CGI

    Большинство серверов Веб имеет такую предварительную конфигурацию, которая позволяет использовать программы CGI. Обычно два параметра указывают серверу о том, является ли файл приложением CGI или нет:

    • Обозначенный каталог. Некоторые серверы позволяют определить, что все файлы в обозначенном каталоге (обычно, по умолчанию, называемый cgi-bin) являются CGI.
    • Расширения имени файла. Много серверов имеют такую предварительную конфигурацию, которая позволяет определять все файлы заканчивающиеся на.cgi, как CGI.

    Метод обозначенного каталога - это своего рода пережиток прошлого (самые первые серверы использовали его как единственный метод для определения того, какие файлы были программами CGI), но он имеет несколько преимуществ.

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

    Обозначение CGI через расширение имени файла может быть полезно благодаря его гибкости. Вы не ограничены одним единственным каталогом для программ CGI. Большинство серверов может быть конфигурировано, чтобы распознать CGI через расширение имени файла, хотя по умолчанию не все из них конфигурированы таким образом.

    Предостережение

    Помните о важности вопросов защиты, когда Вы конфигурируете ваш сервер для CGI. Некоторые подсказки будут рассмотрены здесь, а в Главе 9 "Защита CGI" эти аспекты рассматриваются более подробно.

    Установка CGI на серверах UNIX

    Независимо от того, как конфигурирован ваш сервер UNIX, нужно предпринять несколько шагов, чтобы удостовериться в том, что ваши приложения CGI выполняются должным образом. Ваш сервер Веб обычно будет работать как несуществующий пользователь (то есть пользователь UNIX nobody - учетная запись, которая не имеет прав доступа к файлу и не может быть зарегистрирована). Сценарии CGI (написанные на Perl, оболочке Bourne или на другом языке описания сценария) должны быть, выполнимы и читаемы по всему миру.

    Подсказка

    Чтобы сделать ваши файлы читаемыми и выполнимым по всему миру, используйте следующую команду UNIX права доступа: chmod 755 имени файла.

    Если Вы используете язык описания сценария типа Perl или Tcl, укажите полный путь вашего интерпретатора в первой строке вашего сценария. Например, сценарий Perl, использующий perl в каталоге /usr/local/bin должен начинаться со следующей строки:

    #!/usr/local/bin/perl

    Предостережение

    Никогда не помещайте интерпретатор (perl, или двоичный код Tcl Wish в каталог /cgi-bin. Это создает опасность для защиты в Вашей системе. Более подробно это описано в Главе 9.

    Некоторые универсальные cерверы UNIX

    Серверы NCSA и Apache имеют файлы со сходной конфигурацией, потому что сервер Apache был первоначально основан на коде NCSA. По умолчанию, они конфигурированы таким образом, чтобы любой файл в каталоге cgi-bin (расположенный по умолчанию в ServerRoot) являлся программой CGI. Чтобы изменить местоположение каталога cgi-bin, можно отредактировать файл конфигурации conf/srm.conf. Форматом для конфигурирования этого каталога является

    ScriptAlias fakedirectoryname realdirectoryname

    где fakedirectoryname - псевдо-имя каталога (/cgi-bin), и realdirectoryname - полный путь, где программы CGI фактически сохранены. Вы можете конфигурировать более одного ScriptAlias, добавляя еще строки ScriptAlias.

    Заданная по умолчанию конфигурация достаточна для потребностей большинства пользователей. Нужно отредактировать строку в файле srm.conf в любом случае, чтобы определить правильное realdirectoryname. Если, например, Ваши программы CGI расположены в /usr/local/etc/httpd/cgi-bin, строка ScriptAlias в вашем файле srm.conf должна походить на следующую:

    ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/

    Чтобы обращаться или ссылаться на программы CGI, расположенные в этом каталоге, используется следующий URL:

    Http://hostname/cgi-bin/programname

    Где hostname - имя хозяина вашего сервера Веб, и programname - имя Вашего CGI.

    Например, допустим, что Вы скопировали программу hello.cgi в Ваш каталог cgi-bin (например, /usr/local/etc/httpd/cgi-bin) на Вашем сервере Веб, называемом www.company.com. Чтобы обратиться к вашему CGI, используйте следующий URL: http://www.company.com/cgi-bin/hello.cgi

    Если нужно конфигурировать сервер NCSA или Apache так, чтобы распознавать любой файл с расширением.cgi как CGI, нужно отредактировать два файла конфигурации. Сначала, в файле srm.conf, не комментируйте следующую строку:

    AddType application/x-httpd-cgi .cgi

    Это свяжет CGI типа MIME с расширением.cgi. Теперь, нужно изменить файл access.conf, чтобы можно было выполнить CGI в любом каталоге. Для этого, добавьте опцию ExecCGI к строке Option. Это будет выглядеть примерно как следующая строка:

    Option Indexes FollowSymLinks ExecCGI

    Теперь, любой файл с расширением.cgi считается CGI; обращайтесь к нему, как обращались бы к любому файлу на вашем сервере.

    Сервер CERN конфигурирован так же, как и серверы Apache и NCSA. Вместо ScriptAlias, сервер CERN использует команду Exec. Например, в файле httpd.conf, Вы увидете следующую строку:

    Exec /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

    Другие серверы UNIX можно конфигурировать таким же способом; более подробно об этом описано в документации сервера.

    Установка CGI на Windows

    Большинство серверов, доступных для Windows 3.1, Windows 95 и Windows NT конфигурировано с помощью метода "расширение имени файла" для распознавания CGI. Вообще, изменение конфигурации сервера на базе Windows просто требует выполнения программы конфигурации сервера и внесения соответствующих изменений.

    Иногда конфигурирование сервера для правильного выполнения сценарий (типа Perl) представляется сложным делом. В DOS или Windows, Вы не сможете определить интерпретатор на первой строке сценария, как это происходит при работе с UNIX. Некоторые серверы имеют заранее заданную конфигурацию, чтобы связать некоторые расширения имени файла с интерпретатором. Например, многие Веб-серверы Windows предполагают, что файлы, оканчивающиеся на.pl, являются сценариями Perl.

    Если сервер не выполняет такой тип ассоциации файла, можно определить пакетный файл упаковщика, который вызывает как иинтерпретатор, так и сценарий. Как и с сервером UNIX, не устанавливайте интерпретатор ни в каталоге cgi-bin ни в каком-либо Веб-доступном каталоге.

    Установка CGI на Macintosh

    Две наиболее известные опции сервера для Macintosh - это WebStar StarNine и его предшественник MacHTTP. Оба распознают CGI по расширению имени файла.

    MacHTTP понимает два различных расширения: .cgi и.acgi, который обозначает асинхронный CGI. Регулярные программы CGI, установленные на Macintosh (с расширением.cgi), будут поддерживать Веб-сервер в состоянии занятости, пока не закончится выполнение CGI, вынуждая сервер приостановить выполнение всех других запросов. Асинхронный CGI, с другой стороны, позволяет серверу принимать запросы даже во время своей работы.

    Разработчик CGI Macintosh, использующий любой из этих Веб-серверов, должен, по возможности, использовать просто расширение.acgi, а не расширение.cgi. Оно должно работать с большинством программ CGI; если оно не работает, переименуйте программу на.cgi.

    Выполнение CGI

    После того, как вы установили CGI, имеются несколько способов выполнить его. Если ваш CGI -программа, работающая только с выводом, типа программы Hello,World!, тогда Вы может выполнять ее, просто обращаясь к ее URL.

    Большинство программ выполняется как серверное приложение к форме HTML. Прежде, чем научиться, как получать информацию от этих форм, сначала прочтите краткое введение о создании таких форм.

    Быстрая обучающая программа по формам HTML

    Два наиболее важных тега в форме HTML - это теги

    и . Можно создавать большинство форм HTML, используя только эти два тега. В данной главе, Вы изучите эти теги и небольшое подмножество возможных типов или атрибутов . Полное руководство и ссылка на формы HTML находятся в Главе 3 " HTML и формы" .

    Тег

    Тег используется для определения того, какая часть файла HTML должна быть использована для информации, введенной пользователем. Здесь имеется в виду, как большинство страниц HTML вызывает программу CGI. Атрибуты тега определяют имя программы и местоположение - либо локально, либо как полный URL, тип используемого кодирования, и метод перемещения данных, используемых программой.

    Следующая строка показывает спецификации для тега :

    < ACTION FORM = "url" METHOD = ENCTYPE = "..." >

    Атрибут ENCTYPE не играет особой роли и обычно не включается с тегом . Подробная информация относительно тега ENCTYPE дана в Главе 3. Один из способов использования ENCTYPE, показан в Главе 14 "Фирменные расширения. "

    Атрибут ACTION ссылается на URL программы CGI. После того, как пользователь заполнит форму и предоставит информацию, вся информация кодируется и передается программе CGI. Программа CGI решает сама вопрос о декодировании и обработке информации; этот аспект рассматривается в "Принятие ввода от браузера, " ниже в настоящей главе.

    Наконец, атрибут METHOD описывает, как программа CGI должна получать ввод. Эти два методы - GET и POST - отличаются в отношении того, как передавать информацию программе CGI. Оба обсуждены в "Принятие ввода от браузера. "

    Чтобы браузер смог позволить введение информации пользователем, все теги форм и информация должны быть окружены тегом . Не забудьте заключительный тег

    для обозначения конца формы. Нельзя иметь форму внутри формы, хотя Вы можете установить форму, которая позволяет представлять части информации в различные местах; этот аспект широко рассматривается в Главе 3.

    Тег

    Вы можете создавать полоски ввода текста, кнопки "radio", окна флажков, и другие средства принятия ввода, используя тег. В данном разделе рассматриваются только поля текстового ввода. Для реализации этого поля, используйте тег со следующими атрибутами:

    < INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

    NAME - символическое имя переменной, которая содержит значение, введенное пользователем. Если Вы включаете текст в атрибут VALUE, этот текст будет помещен как заданный по умолчанию в поле текстового ввода. Атрибут SIZE позволяет Вам определить горизонтальную длину поля ввода, поскольку он будет появляться в окне браузера. И наконец, MAXLENGTH определяет максимальное число символов которые, пользователь может ввести в поле. Обратите внимание, что атрибуты VALUE, SIZE, MAXLENGTH являются необязательными.

    Представление формы

    Если Вы имеете только одно текстовое поле в пределах формы, пользователь может представить форму, просто набирая информацию на клавиатуре и нажимая Enter. В противном случае, должен быть какой-то другой способ представления информации пользователем. Пользователь представляет информацию, используя кнопку для представления со следующим тегом:

    < Input type=submit >

    Этот тег создает внутри вашей формы кнопку Submit. Когда пользователь закончивает заполнение формы, он или она может отправить ее содержание по адресу URL, указанному атрибутом ACTION формы, кликая кнопку Submit.

    Принятие ввода от браузера

    Выше были даны примеры записи программы CGI, которая посылает информацию с сервера на браузер. В действительности, программа CGI, которая лишь выводит данные, не имеет много приложений (некоторые примеры даны в Главе 4). Более важной способностью CGI является получение информации от браузера - особенность, которая придает Веб интерактивный характер.

    Программа CGI получает два вида информации от браузера.

    • Во-первых, она получает различные части информации о браузере (его тип, что он может просматривать, хост хозяина, и так далее), сервера (его имя и версия, порт его выполнения, и так далее), и непосредственно о программе CGI (имя программы и где она расположена). Сервер дает всю эту информацию программе CGI через переменные среды.
    • Во-вторых, программа CGI может получать информацию, введенную пользователем. Эта информация, после кодирования браузером, посылается либо через переменную среду (метод GET), либо через стандартный ввод (stdin- метод POST).

    Переменные среды

    Полезно знать, какие переменные среды являются доступными для программы CGI, как в процессе обучения, так и для отладки. В таблице 2.2 приведены некоторые из доступных переменных среды CGI. Можно также записать программу CGI, которая выводит переменные среды и их значения на браузер Веб.

    Таблица 2.2. Некоторые важные переменные среды CGI Переменная среды Цель REMOTE_ADDR Адрес IP машины клиента. REMOTE_HOST Хост хозяина машины клиента. HTTP _ACCEPT Перечисляет типы MIME данных, которые браузер умеет интерпретировать. HTTP _USER_AGENT Информация браузера (тип браузера, номер версии, операционная система, и т.д.). REQUEST_METHOD GET или POST. CONTENT_LENGTH Размер ввода, если он послан через POST. Если не имеется никакого ввода или если используется метод GET, этот параметр не определен. QUERY_STRING Содержит вводимую информацию, когда она передается с помощью метода GET. PATH_INFO Позволяет пользователю определить путь от командной строки CGI (например, http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Транслирует относительный путь в PATH_INFO в фактический путь в системе.

    Чтобы записать приложение CGI, которое отображает переменные среды, нужно знать, как выполнить две вещи:

    • Определить все переменные среды и их соответствующие значения.
    • Вывести результаты для браузера.

    Вы уже знаете, как выполнять последнюю операцию. В Perl переменные среды сохраняются в ассоциативном массиве %ENV, который вводится именем переменной среды. Листинг 2.3 содержит env.cgi, программу Perl, которая служит для достижения нашей цели.

    Листинг 2.3. Программа Perl, env.cgi, которая выводит все переменные среды CGI.

    #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print " \n"; print "CGI Environment\n"; print "\n"; print "\n"; print "

    CGI Environment

    \n"; foreach $env_var (keys %ENV) { print "$env_var = $ENV{$env_var}
    \n"; } print " \n";

    Подобная программа может быть написана в C; полный код находится в Листинге 2.4.

    Листинг 2.4. Env.cgi.c в C. /* env.cgi.c */ #include extern char **environ; int main() { char **p = environ; printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf("CGI Environment\n"); printf("\n"); printf("\n"); printf("

    CGI Environment

    \n"); while(*p != NULL) printf("%s
    \n",*p++); printf(" \n"); }

    GET или POST ?

    Какая разница между методами GET и POST? GET передает закодированную входную строку через переменную среды QUERY_STRING, а POST передает ее через stdin. POST - более предпочтительный метод, особенно для форм с большим количеством данных, потому-что здесь нет каких-либо ограничений в отношении объема посылаемой информации, а при методе GET объем пространства среды ограничен. GET имеет однако определенное полезное свойство; это подробно рассматривается в Главе 5 "Ввод".

    Чтобы определить, который метод используется, программа CGI проверяет переменную среду REQUEST_METHOD, которая будет установлена либо в GET, либо в POST. Если она установлена в POST, длина закодированной информации сохранена в переменной среды CONTENT_LENGTH.

    Закодированный Ввод

    Когда пользователь передает форму, браузер сначала кодирует информацию перед посылкой ее на сервер, а затем на приложение CGI. Когда Вы используете тег , каждому полю присваивают символическое имя. Значение, введенное пользователем, представляется как значение переменной.

    Чтобы определить это, браузер использует кодирующую спецификацию URL, которая может быть описана следующим образом:

    • Отделяет различные поля амперсандом (&).
    • Отделяет имя и значения знаками равенства (=), с именем слева и значением справа.
    • Заменяет пробелы знаками "плюс" (+).
    • Заменяет все "ненормальные" символы знаком процента (%), за которым следует двузначный шестнадцатеричный код символа.

    Ваша конечная закодированная строка будет похожа на следующую:

    Name1=value1&name2=value2&name3=value3 ...

    Примечание: Спецификации для кодирования URL находятся в RFC1738.

    Например, предположим, что у вас была форма, которая запросила имя и возраст. Код HTML, который использовался для отображения этой формы, представлен в листинге 2.5.

    Листинг 2.5. Код HTML для отображения формы имени и возраста.

    Name and Age

    Enter your name:

    Enter your age:

    Предположим, что пользователь вводит Joe Schmoe в поле имени, и 20 - в поле возраста. Ввод будет закодирован во входной строке.

    Name=Joe+Schmoe&age=20

    Синтаксический анализ ввода

    Для того чтобы эта информация была полезной, нужно использовать информацию на что-то такое, что может быть использовано вашими программами CGI. Стратегии синтаксического анализа ввода рассматриваются в Главе 5. Практически, Вам никогда не придется думать о том, как анализировать ввод, потому что несколько специалистов уже написали доступные для всех библиотеки, которые производят синтаксический анализ. Две такие библиотеки представлены в настоящей главе в следующих разделах: cgi -lib.pl для Perl (написаны Стивом Бреннером) и cgihtml для C (написаны мной).

    Общая цель большинства библиотек, написанных на различных языках, состоит в том, чтобы анализировать закодированную строку и помещать пары имен и значений в структуру данных. Имеется очевидное преимущество в использовании языка, который имеет встроенные структуры данных типа Perl; однако, большинство библиотек для языков низшего уровня типа C и C++ включает выполнение структуры данных и подпрограммы.

    Не обязательно добиваться полного понимания библиотек; гораздо важнее научиться использовать их как инструментальные средства, чтобы упростить работу программиста CGI.

    Cgi -lib.pl

    Cgi -lib.pl использует ассоциативные массивы Perl. Функция &ReadParse анализирует входную строку и вводит каждую пару "имя / значение" по имени. Например, соответствующими строками Perl, необходимыми для декодирования только что представленной вводной строки "имя / возраст", были бы

    &ReadParse(*input);

    Теперь, чтобы увидеть значение, введенное для "имени", можно обращаться к ассоциативному массиву $input {"имя"}. Точно так же, чтобы обратиться к значению "возраста", нужно посмотреть на переменную $input {"возраст"}.

    Cgihtml

    C не имеет никаких встроенных структур данных, так что cgihtml осуществляет свой собственный список связей для использования со своими анализирующими подпрограммами CGI. Это определяет структуру entrytype следующим образом:

    Typedef struct { Char *name; Char *value; } Entrytype;

    Чтобы проанализировать вводную строку "name / age" ("имя / возраст") в C, используя cgihtml, используется следующее:

    /* объявить связанный список, называемый вводом */ Llist input; /* анализировть ввод и место в связанном списке */ read_cgi_input(&input);

    Чтобы обратиться к информации о возрасте, можно либо проанализировать список вручную, либо использовать имеющуюся функцию cgi _val ().

    #include #include Char *age = malloc (sizeof (char) * strlen (cgi _val (input, "age")) + 1); Strcpy (age, cgi _val (input, "age"));

    Значение "возраста" теперь сохранено в строке age.

    Примечание: Вместо использования простого массива (подобно char age ;), я занимаюсь динамическим распределением пространства памяти для строки age. Хотя это усложняет программирование, тем не менее это важно с точки зрения безопасности. Более подробно о этом говорится в Главе 9.

    Простая программа CGI

    Вы собираетесь записать программу CGI, называемую nameage.cgi, которая обрабатывает форму "имя / возраст". Обработка данных (что я обычно называю "промежуточным материалом") минимальна. Nameage.cgi просто декодирует ввод и отображает имя пользователя и возраст. Хотя не особенно много пользы от такого инструмента, он демонстрирует наиболее критический аспект программирования CGI: ввод и вывод.

    Вы используете ту же самую форму, как описано выше, вызывая поля "имя и возраст". Пока не стоит беспокоиться об ошибкоустойчивости и эффективности; решите имеющуюся задачу простейшим образом. Решения в Perl и C показаны соответственно в листингах 2.6 и 2.7.

    Листинг 2.6. Nameage.cgi в Perl

    #!/usr/local/bin/perl # nameage.cgi require "cgi-lib.pl" &ReadParse(*input); print "Content-Type: text/html\r\n\r\n"; print " \n"; print "Name and Age\n"; print "\n"; print "\n"; print "Hello, " . $input{"name"} . ". You are\n"; print $input{"age"} . " years old.

    \n"; print " \n";

    Листинг 2.7. nameage.cgi в C

    /* nameage.cgi.c */ #include #include "cgi-lib.h" int main() { llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf("Name and Age\n"); printf("\n"); printf("\n"); printf("Hello, %s. You are\n",cgi_val(input,"name")); printf("%s years old.

    \n",cgi_val(input,"age")); printf(" \n"); }

    Обратите внимание на то, что эти две программы почти эквивалентны. Они обе содержат подпрограммы синтаксического анализа, которые занимают только одну строку и обрабатывают весь ввод (благодаря соответствующим библиотечным подпрограммам). Вывод, по существу, является измененной версией вашей основной программы Hello, World!.

    Попытайтесь выполнить программу, заполняя форму и нажимая кнопку Submit.

    Общая стратегия программирования

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

    • Простота
    • Эффективность
    • Универсальность

    Первые два качества достаточно распространены: старайтесь сделать код как можно более читаемым и эффективным. Универсальность больше относится к программам CGI, чем к другим приложениям. Когда Вы начнете разрабатывать свои собственные программы CGI, Вы узнаете, что имеется несколько основных приложений, которые хочет сделать каждый. Например, одна из наиболее распространенных и очевидных задач программы CGI является обработка формы и посылка по электронной почте результатов определенному получателю. Вы могли бы иметь несколько отдельных обработанных форм, каждая с различным получателем. Вместо записи программы CGI для каждой отдельной формы, Вы можете съэкономить время, написав более общую программу CGI, которая годится для всех форм.

    Затронув все основные аспекты CGI, я обеспечил Вас достаточными сведениями, чтобы начать программирование CGI. Однако чтобы стать эффективным разработчиком CGI, нужно иметь более глубокое понимание того, как CGI связывается с сервером и браузером. В оставшейся части настоящей книги подробно рассматриваются те вопросы, о которых вскользь было упомянуто в данной главе, а также вопросы стратегии разработки приложений, преимущества и ограничения протокола.

    Резюме

    В настоящей главе вкратце были описаны основы программирования CGI. Вы создаете вывод, правильно форматируя ваши данные и печатая в stdout. Получение ввода CGI является несколько более сложным делом, потому что он должен быть проанализирован до своего использования. К счастью, уже существуют несколько библиотек, которые осуществляют синтаксический анализ.

    К данному моменту Вы должны достаточно легко справиться с программированием приложений CGI. Оставшаяся часть настоящей книги посвящена более подробному изложению спецификации, подсказкам и стратегии программирования более продвинутых и сложных приложений.

    I am an experienced & commercially focused head of marketing with 13 years of experience. Adept at strategizing & designing innovative marketing plans to drive both online and offline conversions through multiple channels. Passionate about developing complex automated marketing processes and journeys with trackable metrics, whilst
    always keeping the return on investment as the core focus. Confident in building and recruiting technical, marketing, customer service and accounts teams.

    CAREER SUMMARY

    Travelopo.com / Head of Marketing

    Strategic account management of core accounts, including Booking.com,
    HomeAway, Expedia, AirBnB, TripAdvisor, Hometogo & Holidu.
    Responsible for recruitment of developer, technical, marketing, accounts & customer service teams.
    Responsible for sourcing and management of external marketing, PR & development agencies.
    Responsible for Channel management (Kigo, Avantio & Rentals United), including growing from 70 to 520 property suppliers in 2 years.
    Management all on site SEM, PPC, SEO, UX and CRO & PR.
    Partnership building with 100s of members of the press & social influencers, with 40 press trips between 2016 and 2018, including international magazines and newspapers & influencers.
    Responsible for the creation of all in house reporting using the Salesforce CRM solution (profit & loss, debtors & Creditors & profitability of enquiry and booking channel solutions).
    Management of the integration of the bespoke Salesforce CRM solution, website & data ingress solution.
    Competent with Salesforce, Google platforms Social Platforms, AutopilotHQ, Segment.com, Mouseflow and GIT, Basecamp, Jira (Agile development) & SEO reporting tools (SEMrush, RavenTools, Ahrefs).
    Responsible for assuring PCI & GDPR compliance.
    Responsible for sourcing and developing new outbound channels.
    Headline figures from the last 2 years: 300% growth year on year growth with our largest supplier, 700% growth in property suppliers, 280% growth in supply of properties.

    Cai Thomas Online Marketing / Founder

    Offering consultancy & hands on marketing for number of luxury brands across the UK.
    Developing strategic SEO, SEM, PPC & affiliate advertising campaigns.
    KPI driven management of marketing campaigns.
    10,000% Return on investment for a national dental implant training company.
    Management external parties including Groupon, Living Social & Amazon.
    Achieving 1st page results for all products offered for all locations at a local and regional level in sectors such as cosmetic surgeries, luxury fabrics, bathrooms & wedding venues.
    Responsible for sourcing of contractors from global networks to work on client’s projects.

    All Your Life / Head of Marketing

    Responsible for performance driven management of all marketing and development within the group. Developing a business supplying the franchisees with multi millions pounds of business a year, with campaigns achieving a ROI of 3500%
    KPI driven management of marketing campaigns for clients.
    8,000% growth in lead generation over a 12-month period.
    500% ROI on cosmetic campaigns.
    Managed external parties include Groupon, Living Social & Amazon.
    Responsible for planning, developing, testing & deploying a network of booking sites using systems such as Bookly, WordPress & BookingBug.
    UX and data driven optimisation for increased conversions.
    Achieving 1st page results for all products offered for all locations using SEO.

    PC Dial (PCD IT SUPPORT LTD)/ Managing Director

    I co-founded & managed PCD IT Support Ltd after receiving 4 sets of investment from investors. PC Dial offers proactive IT support for SMEs across the UK. With a large customer list of subscribed monthly clients. PC Dial rapidly became a well known remote IT support company, specialising in estate agents. This business is still being run by my brother in law.
    Responsible for growing the paying subscriber list to 100s of monthly support customers.
    Providing free computer lessons to the local area, including at local schools for the elderly.
    Exhibited at national SME events, such as the Small Business Show.
    Responsible for generating partnerships with global security brands such as FSecure.
    Certified with Google Partner Program, Microsoft SBS and Google AdWords / Analytics programs.
    Responsible or employing and training staff partaking in the national apprentice program.

    Alternative Bathrooms / Online Marketing Manager

    Management, development, growth and operations management for one of the largest online luxury bathroom chains in the UK.
    Responsible for achieving 550% growth in 9 months, exceeding all KPI targets.
    As a business we grew product range from 100s of products to over 10,000
    products.
    Sourcing new partners and providers, negotiating favourable, commercially profiable rates.
    Additionally, undertaking online advertising for sister showroom-based brands.
    Responsible for all SEM, SEO, PPC and offline advertising, including the
    management of the external PR agency.
    Management of operational and administrative staff within my capacity as online marketing manager.
    This employment period included the transfer of topbrandbathrooms.com between Colourwash Bathrooms and The Alternative Bathroom Company after a sale of the business and a management buyout.

    SkyLineSolar.co.uk / Founder

    Founded, developed & managed SkyLineSolar from April 2006 to October 2007 (FT), to fund my university education.
    Responsible for sourcing suppliers and products from across the world.
    All traffic generated entirely organically from SEO.
    I commissioned & designed an OS-commerce website.
    Responsible for all customer service and sales, whilst liaising with press to generate PR and free advertorial in exchange for reviews.
    I sold the company due to academic time constraints.

    CAREER SUMMARY

    BSC Geography & Environmental Managemen t, 2:1– University of the west of England – 2009
    Geography, Chemistry & Business Studies A Levels – Backwell Comprehensive School – 2005

    HOBBIES & INTERESTS

    I love travelling and eating out, walking our two dogs, enjoying time with my wife and baby boy. I enjoy reading and listening to books focusing largely around the sciences, economics and politics.
    As a side project to keep my knowledge up to date I manage and have automate multiple social media accounts, with the 4 biggest having 70k, 50K, 35k and 20K Instagram followers, with user
    submitted content being the only source of content, with posts regularly generating over 2K organic engagements (likes/comments).