Добавить в цитаты Настройки чтения

Страница 94 из 133

· «/H1»

· «I»«B»И«/B»дея "единого ножа для швейцарской армии" имеет свои достоинства,

· но когда ее доводят до абсурда, этот нож становится камнем на шее.«/I»

· «BR»

· «DIV align=right»

· Никлаус Вирт

· «BR»

· "От разработки языков программирования к констуироваию компьютеров"

· «HR»

· «/BODY»

Указание спецификации HTTP 1.0 приводит к тому, что ответ сервера немного отличается от предыдущего. В нем появляется заголовок с множеством любопытных полей, несущих в себе информацию о сервере, дате последней модификации документа и других, не менее полезных сведений.

Выделенная жирным шрифтом строка «Co

Чтобы изменить значение поля “Co

· GET /~kpnc/ HTTP/1.0

· Co

·

· HTTP/1.1 200 OK

· Date: Sat, 15 Apr 2000 06:10:37 GMT

· Server: Apache/1.3.6 (Unix)

· Last-Modified: Thu, 13 Apr 2000 11:30:04 GMT

· ETag: "b139bf-83-38f5afbc"

· Accept-Ranges: bytes

· Content-Length: 131

· Keep-Alive: timeout=15 , max=100

· Co

· Content-Type: text/html

·

· «BODY»

· «BR»

· «BR»

· «HR»

· «H1»

· «CENTER»

· Helo, Sailor!

· «/H1»

· «BR»

· «H2»

· Click «A HREF="next.htm"»here«/A»

· «/h2»

· «HR»

· «/BODY»

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

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

Остальные поля заголовка исчерпывающе описаны в RFC-1945 и RFC-2068, и здесь не рассматриваются.

Для удаленного выполнения программ может использоваться все тот же метод “GET”, вызываемый точно так, как для запроса содержимого обычного HTML-документа. Единственное различие заключается в том, что клиенту возвращается не исходный текст программы, а результат ее работы. Получить в свое распоряжение содержимое исполняемого файла невозможно (точнее не должно быть возможно), даже если имеются права на его чтение.

Врезка «информация»

Вспоминается громкий скандал, развернувшийся вокруг обнаруженной ошибки в Internet Information Server 3.0 (IIS 3.0), позволяющий получить доступ к содержимому asp (Active Server Pages) скриптов добавлением в конце имени знака точки. То есть, если к default.asp [255], расположенному на сайте www.microsoft.com [256], обратиться так - “GET /default.asp . [257]”, то сервер вернет сам файл, а не результат его работы.

Например:

GET /Default.asp.

«% emailx=request.form("email")

remarkx=request.form("remark")

Set Co

Co

Set RS = Co

Your information has been added to our database.

Разработчики впопыхах дописали несколько наивных строк тривиально фильтра и поплатились за это. В суматохе никому и в голову не пришло, что тот же самый вызов можно записать и как - “GET /default.asp%20/”, то есть заменить символ точки ее шестнадцатеричным значением. И только что выпущенная заплатка оказалась бесполезной.

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

Врезка «замечание»

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

В качестве небольшого упражнения, можно запустить демонстрационный пример, расположенный по адресу http://lighning.prohosting.com/~/kpnc/cgi-bin/helo.pl Результат его работы показан на рисунке, приведенном ниже:

Рисунок 20 Демонстрация удаленного выполнения программы

Если заглянуть в исходный файл, прилагаемый к книге (“/SRC/Hello.pl”), бросается в глаза одна странность:

· #!/usr/local/bin/perl -w

· print "Content-type: text/html

· print "Hello,Sailor!n";

Сервер «съел» одну строку (в листинге она выделена жирным шрифтом). Если же ее попытаться убрать, то выполнение скрипта прервется с сообщением об ошибке. Причины такого поведения подробно рассмотрены в дополнении «Протокол CGI».

В главе «Что можно сделать с помощью Perl» замечалось, что многие сервера неявно предоставляют возможность выполнения скриптов. Для этого достаточно поместить свой файл в директорию, с атрибутами “r w x - - x - - -x”, которая, как правило, называется «/BIN» или «/CGI-BIN». Иногда это можно сделать с помощью FTP (File Transfer Protocol, смотри главу «Протокол FTP» [258]), но в подавляющем большинстве случаев ftp-доступ закрыт (точнее, правильнее было бы сказать, не открыт).

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