CGI - Common Gateway Interface является стандартом интерфейса, который служит для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, многие больше любят названия скрипт или CGI-программа.
Сам протокол разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода/вывода. А это умеет даже сама операционная система, поэтому часто если вам не требуется сложный скрипт, его можно просто сделать в виде командного файла.
Все скрипты, как правило, помещают в директорию cgi-bin сервера, но это совсем даже не обязательно, в принципе скрипт может располагаться где угодно только при этом большинство Web-серверов требуют специальной настройки.
В web-сервере Apache такая настройка производится с помощью файла .htaccess в той директории, где содержится этот скрипт. Вот содержание такого файла:
Options ExecCGI
Также Apache позволяет запускать все скрипты имеющие рассширение .cgi, если в файле настроек сервера httpd.conf есть настройка:
AddHandler cgi-script .cgi
Чаще всего, хотя наверно почти всегда, скрипты используются для создания динамических страниц. Связано это с тем, что само содержимое веб-сервера является статическим и не будет меняться просто так, для этого должен приложить руку веб-мастер. Технология CGI позволяет просто поменять содержимое веб-сервера. Простым примером может служить скрипт, который при каждом новом обновлении страницы вставляет в нее новую ссылку(банер) или анекдот. Более сложными скриптами являются гостевые книги, чаты, форумы и естественно поисковые сервераили базы данных построенные на технологиях интернета.
Данный формат появился в июле 2003 года как альтернатива RSS каналам. Сначала проект назывался Echo, но затем возникли проблемы с товарным знаком и проект был переименован в Atom. Atom — это основанный на XML формат, предназначенный для агрегирования информации в первую очередь с веб-сайтов. Он создавался для использования в блогах, однако может применяться и для любых других новостных и периодических изданий в web. Существенной частью спецификации является протокол, работающий поверх HTTP, предназначенный для автоматизации ведения блога. Мы будем рассматривать версию 1.0 ставшую стандартом W3C в 2005 году.
RSS — семейство XML-форматов, предназначенных для описания лент новостей, анонсов статей, изменений в блогах и т. п. Информация из различных источников, представленная в формате RSS, может быть собрана, обработана и представлена пользователю в удобном для него виде специальными программами-агрегаторами. Обычно с помощью RSS 2.0 даётся краткое описание новой информации, появившейся на сайте, и ссылка на её полную версию. Интернет-ресурс в формате RSS называется RSS-каналом или RSS-лентой или RSS-фидом. Практически все популярные современные браузеры поддерживают RSS каналы: Safari, Maxthon, Mozilla Firefox, Mozilla Thunderbird, Opera, Microsoft Internet Explorer начиная с 7-й версии. Я не буду останавливаться на истории формата, скажу лишь что существуют версии 0.91, 1.0 и 2.0, причем не совместимые между собой. Крайне не рекомендую вам использовать версию 0.91, потому что умная Netscape 5 января 2006 года удалила с сайта my.netscape.com файл rss-0.91.dtd, ссылки на который были размещены в большом количестве трансляций формата RSS версии 0.91. Это событие привело к сбою некоторых онлайновых и офлайновых агрегаторов, так как потоки, ссылающиеся на этот DTD стали невалидными. Мы же рассмотрим самый последний формат на момент написания этой статьи - RSS 2.0.
Бытует мнение, что найти серьезный баг в популярном продукте нельзя. Действительно, это реально сложно, но отнюдь не невозможно. Конечно, современные продукты кодеры пишут явно с учетом существования нас с вами. Сканят новейшими сканерами, ставят всякие проверки, отдают проект разным аудит-компаниям, отваливая тонны бабла за услуги пен-тестинга. Но никто и ничто не гарантирует абсолютную защищенность. И хоть сто тестеров будут искать баги - проследить все взаимозависимости, вызовы способен лишь гений. Которых, как известно, не существует :). Зато хакеров, которых хлебом не корми, дай что-нибудь взломать, пока хватает.
Создаем плацдарм
Перво-наперво поднимем локальный веб-сервер на своем PC. Ведь, согласись, что палить найденные баги в логах на официальном сайте просто не профессионально. Хотя дело не только в "засвечивании" уязвимостей. Настройки чужого сервера могут быть нам не благоприятны, и мы просто не заметим баг, который живет в движке. Поэтому, скажу немного о настройке локального веб-сервера с приоритетом на максимальное отображение всех ошибок.
В покере есть такая начальная комбинация карт - туз и валет. Ее называют «AJAX». Если она выпадает при раздаче, то шансы на выигрыш очень велики. Существует одноименная компьютерная технология, которая обещает стать козырной картой в колоде любого сайта.
Теория
Вначале - пара слов про технологии, которые мы будем использовать в статье. Чтобы писать полноценные веб-приложения на Аяксе, надо на приличном уровне знать и уметь применять:
язык разметки гипертекста HTML, а лучше XHTML;
каскадные таблицы стилей CSS;
объектную модель DOM;
язык программирования на стороне клиента, обычно JavaScript;
объект XMLHttpRequest для обмена данными с сервером;
XML для формирования данных, либо другой формат, например JSON.
Если в вышеперечисленном списке встретились незнакомые слова, то не стоит отчаиваться - я поясню их, когда это понадобится.
Общая схема работы
Пользователь заходит на страничку, сделанную при помощи Аякса, и производит некое действие, например, кликает мышкой по ссылке. Обработчик этого события посылает запрос на сервер. Он получает информацию и посылает ответ, который обрабатывает соответствующая функция на стороне клиента. Эта функция формирует готовый HTML и показывает его пользователю. Чтобы представить этот процесс, можно взглянуть на схему.
Современные системы бизнес уровня, а также информационные сайты и блоги редко обходятся без использования СУРБД, реже других источников данных. Наиболее удобная реализация взаимодействия бизнес логики, источника данных и представления зависит от планирования архитектуры приложения. Объектно-ориентированное программирование позволяет реализовать вашу систему так, что отдельные модули можно использовать в других системах. В данной статье мы реализуем архитектуру взаимодействия с источником данных. И назовем этот модуль Data Source Object.
Ajax, состоящий из HTML, технологии JavaScript, DHTML и DOM, это замечательный подход, который помогает вам преобразовать тяжеловесные Web-интерфейсы в интерактивные Ajax-приложения. Автор, эксперт по Ajax, демонстрирует совместную работу этих технологий (от общего обзора до детального изучения), цель которой – сделать чрезвычайно эффективную Web-разработку повседневной реальностью. Он также раскрывает основные концепции Ajax, включая объект XMLHttpRequest.
В данной статье пойдет речь о нестандартном использовании PHP: для создания сжимающего трафик PHP-скрипта, который можно использовать в качестве виртуального прокси-сервера. Профессионалы PHP-фронта здесь вряд ли найдут что-то новое: такое применение php не мое ноу-хау и никаких особых функций php не используется. Остальные в этой статье узнают о новом способе экономии кило-мега-гигабайтов во время веб-серфинга. Не удивлюсь, если кто-то предприимчивый, прочитав эту статью, начнет уже завтра экономить свои мегабайты. Особенно после того, как узнает, каким образом можно построить схему прозрачной работы этой виртуальной прокси.
На заре моей диалап-юности модемы обменивались сжатыми данными, из-за чего конечная скорость веб-серфинга была выше в сравнении со скачиванием zip-архива. Таким образом экономились время и деньги клиента за счет нагрузки на процессоры модемов во время компрессии. Настали другие времена: диалап постепенно сдает свои позиции под натиском выделенных линий. А тут уже ни о каком сжатии трафика на чьих-либо процессорных мощностях речи не ведется как правило: трафик идет в своем первозданном виде, ни на байтик не сжат (если этим не озаботились на стороне сервера). А ведь его можно сжать!..
Интернет пережил пик своего бурного развития и сейчас собственных сайтов нет разве что у домашних животных (хотя некоторые маргиналы умудряются вести блоги за своих питомцев). Если проанализировать и сопоставить количество созданных ресурсов и количество более-менее разбирающихся в вопросах обеспечения сетевой безопасности людей, мы получим довольно прискорбную картину. Главным бичом сайтостроительства, как я считаю, являются свободно распространяемые скрипты. Так уж вышло, что за годы через мои руки прошло огромное количество подобных творений, и зачастую они оставляют весьма дурное впечатление. Самое ужасное – это их открытый код, в котором хакеры выискивают тонны уязвимостей, и часто встречающееся доверие к таким скриптам пользователей, считающих создателей если не небожителями, то уж точно кевинмитниками от программирования.
В данной статье я дам практические советы по обеспечению безопасности динамического веб-проекта, поделюсь нестандартными методами защиты. Много практики и минимум теории – её ищите в мануалах и книгах, а также на просторах Сети. Кроме того, я не буду заострять внимание на всем известных багах навроде “ядерного нуля” – читайте “Хакер”, и будет вам счастье.
Я попытаюсь тут разъяснить то, как я подхожу к написанию сайтов, где могут применять подключаемые модули. Пример тому известный скрипт PHPNuke. Как бы не ругали его, подход, примененный в нем, к модульному программированию очень удобен. Но из-за корявости общего кода применять такой скрипт на серьезных сайтах, точнее скажем порталах, с большим количеством посетителей, не рекомендуется. Почему? Скрипт работает медленно, очень большая нагрузка на базу данных. Можно еще очень много чего описать, но это уже материал для другой статьи. Если кому интересно , то в интернете полно описаний этого движка. В <неудобоваримости> PHPNuke я убедился сам. Мой основной проект NVIDIA BIOS Collection в начала базировался на PHPNuke, но постоянные проблемы с хостингом заставили меня начать разработку своей система портала с нуля. Из PHPNuke я взять только суть модулей, все остальное же делал сам. И так для начала. Прежде всего, надо продумать систему каталогов, что и где будет лежать. Вот примерный вариант.