Анимация
JavaScript
|
Главная Библионтека Имена и значения полей формы передаются ограмму с помощью одного из методов: GET или POST (рис. 18.4). Пока механизм этой передачи не должен вас Web-сервер
Рис. 18.4. Дае перестся серверу COI-программа получает значения, генерирует ответ и посылает его обратно броузеру (рис. 18.5). Этим ответом может быть страница HTML, страница с другой формой, нереадресация на другой URL или любой другой возможный вывод Web-сервер Рис. 18.5. CGI-программа Web-сервера возвращает ответ Передача информации CGI-програлллле COI-программа, начавшая свое выполнение в результате передачи данных формы, должна обработать имена и значения полей, называемых параметрами. Для этого в модуле COI имеется функция param. Если вызвать эту функцию без аргументов, она возвратит имена полей, переданных COI-программе Если COI-программе передается форма, HTML-код которой приведен в листинге 18.1, функция param возвратит список description, sex, name и submit Если у функции param имеется аргумент, она возвратит значение этого параметра. Например, вызов param (sex) возвратит значение переключателей - male или female, в зависимости от того, какой переключатель был выделен. В листинга .2 приведена короткая COI-программа для вывода этих параметров. Лист 18.2. CGI-Ofрала вьда параметров !/usr/bin/perl -w use strict; use CGI qw(;standard I; print header; 6: print "Оамития: ", par am (паше) г "<BR>"; 7: print "Поп: ", param(sex}, -<BR>-; 8: print Описание;<ВК>", parcm(descriptiai), "<?>"! Если параметр, указанный в аргументе функции не используется в форме, функция возвращает значение Методы и PO6T В форме, текст которой приведен в листинге 18.1, у дескриптора имеется атрибут method. Этот атрибут определяет, каким образом Web-броузер должен передавать данные Web-серверу. На данный момент существуют два метода. Первый метод (он используется по умолчанию, т.е. в том случае, когда в дескрипторе <ШМ> не указан атрибут method) - GET. При этом методе значения элементов формы передаются в CGI-программу в закодированном виде как часть URL. При работе в Internet часто можно видеть подобные URL: http: www.server.com/cgi-bin/sample.pl?name=foosdesc=Basic%20rorms CGI-программа преобразует последнюю часть URL и получит поля и их значения. Это происходит при вызове функции param. ffe пытайтесь получить эти значения другим способом. Функции ram идеально подходит для этого, и у вас едва ли возникнет необходимость воспользоваться другим кодом для извлечения значений полей. Другой метод, ST, позволяет добиться того же результата, но другими средствами. При этом значения элементов формы не добавляются к URL, а перес1лаются на стандартный вход CGI-программы после установки соединения с Web-сервером. Тонкости этого процесса вам знать не обязательно, в модуле GGI все они уже учтены. Как и раньше, для получения в программе значений полей достаточно вызвать функцию param. В Internet или в других книгах можно встретить CGI-программы, которые проверяют переменную Офужения QDERY STRING ИЛИ REQUEST HETHOD, чтобы определить, какой был использован метод - СЁ" или POST. Эти программы пытаются воспроизвести функциональность стандартного модуля CGI и, вероятно, не столь успешно. Не делайте этого в ваших программах. Итак, какой же метод выбрать? Каждый метод имеет свои преимущества и недостатки. Метод GEL позволяет в Web-броузере создать закладку на URL, генерирующий данную страницу. Например, па URL http: www.server.com/cgi-bin/sample.pl?name=fooSdesc=Basic*20Forms может быть сделана закладка и в дальнейшем в любой момент вызвана. Для CGI-программы sample.pl неважно, заполняли ли вы на самом деле форму или нет. Ей важно получить параметры для выполнения CGI-программы. Возможность многократного вызова CGI-программы при использовании метода QT называется идемпотентностью. Возможно, вам не нужно, чтобы в Web-броузере можно б1ло сделать закладку, непосредственно запускающую CGI-программу на ващем сервере. К тому же, следует заметить, что URL при использовании метода GEL выглядит очень некрасиво. Метод POST не использует URL для передачи данных, при этом методе данные пе-ресьшаются отдельно. Поэтому в данном случае закладку на страницу, генерируемую сделать невозможно. Основные сведения по вопросам безопасности в Web Перед тем как поместите ограмму на Web-сервер, вы должны осознать, что тем самым вы предоставляете удаленным пользователям, использующим Web- броузеры, ограниченный доступ к вашей системе. В случае обычных документов HTML пользователи могут лишь загрузить статические документы. При использовании COI-программ они смогут запускать программы на Web-сервере Написание безопасных COI-программ сохранит нервы вам и администратору Web-сервера. Создавать такие программы несложно, нужно лишь следовать некоторым правилам. Открытый канал При загрузке в броузер страницы с Web-сервера коды HTML пересылаются по обычному каналу в открытом виде (рис. 18.6). Это означает, что эти данные не кодируются, не шифруются и не скрываются каким-либо другим способом. Internet Web-сервер Пароль: продается янс< ий шкаф?" Рис. 18.6. Обычный текст пересылается на сервер Данные, которые пользователь вводит при заполнении формы, передаются COI-программе и пересылаются с использованием того же протокола, что и начальная Web-страница Во время пересылки все поля формы открыты для всеобщего обозрения (рис. 18.7) Web-сервер Отзь*~ш васп ЖИУУ1 У11$им выше!" Рис. 18.7, Ответ сервера -обычный текст Пересылка данных в открытом виде - одна из основных проблем, на которые вы должны обратить особое внимание. Internet - далеко не безопасное место. Кто угодно может подключиться к кабелю, по которому пересылаются данные между сервером и броузером, и перехватить их. Учитывая все вышесказанное, вы никогда не должны передавать следующие данные посредством обычных CGI-форм, • Любые пароли. • Личную информацию (номера карточек социального страхования, телефонные номера). • Финансовую информацию (номера счетов, PIN-коды, карточек). номера кредитных 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 [ 88 ] 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |