Анимация
JavaScript
|
Главная Библионтека Существует простое правило: никогда не пересылайте через Internet то, что нельзя смело доверить обыкновенной почтовой открытке. "Стоп!"- скажете выЯ же неоднократно встречался в Internet с формами, запрашивающими подобную информацию. Уверялось, что это совершенно безопасно". Достаточно безопасные транзакции могут быть осуществлены в Web с использованием дополнительных средств. Безопасные Web-транзакции предусматривают полное кодирование диалога между сервером и броузером. Для этого используется безопасная версия протокола http, называемая https. Проверка данных на безопасность Другой важный момент, на который нужно обратить внимание при нанисании безопасных CGI-программ, - зависимость выполнения команд Perl от информации, присылаемой от формы. В Internet и, возможно, в вашей внутренней сети встречаются люди, которых хлебом не корми, дай им только возможность повредить ваш Web-сервер. Даже обычные пользователи случайно могут послать неправильные данные CGI-программе и тем самым вывести ее из строя. Посмотрите на код HTML формы и на CGI-профамму, которые приведены соответственно в листингах 18.3 и 18.4. Ли.З. Форма для эсм сояержого калогов 1: <PORM action=/cgi-bin/<lirectory.cgi"> 2: каксй каталог щюсмлреть? 3: <I1IPUT TYEE=text NA«E=dirname> 4: <II1PUT TYPE= submit iia]ne=8ubmit value=3anpoc"> 5: </FORH> Ли 18.4. Небезопасная CGI-юграма directory, cgi 1: f1/usr/bin/perl -V 2: используйте эту программу, она очень опасна 3: use strict; 4: use CGI qw(:all); 6: print header; 7: my $directory=parani(dirname); 8: print Us -1 5directory~; I Просмотр каталога В листинге 18.3 приведен короткий код формы, которая запрашивает имя каталога и передает его программе directory, cgi. Программа directory .cgi получает имя каталога и подставляет его в системную командв -1, эквивалент которой в DOS - команда dir. Эти команды выводят содержимое указанного каталога. Программа такого рода позволяет удаленным пользователям исследовать структуру каталогов. CGI-программа не проверяет допустимость вводимого имени каталога, и броузер получает возможность доступа к любым конфиденциальным данным. Наиболее интересно то, что в неременной Sdirectory может вообще находиться не имя каталога! Например, если в поле dirname ввести значение /home; cat /ets/passwd, то выполняемая системная команда будет иметь вид Is -1 /home; cat /etc/passwd Эта команда передаст копию файла системнтх паролей в Web-броузер Факгиче- ски таким образом может быть запушена любая команда оболочки UNIX или MS- DOS Если Web-сервер неправильно установлен и настроен, то это может сделать любой пользователь Internet. В Perl имеется механизм, предотвращающий подобные вещи. Ключ -Т, указанный в строке, начинающейся с fi, включает режим контроля данных (data tainting). При этом данные, полученные из внешних источников (дескрипторов файлов, сетевых двунаправленных каналов, командной строки), помечаются как представляющие повышенную опасность. Помеченные таким образом данные нельзя использовать в системных вызовах, таких как open, функции system, системных командах и в других местах, чувствительных в смысле безопасности. Функции open, system или оператор , вообще нельзя использовать при включенном режиме контроля данных до тех пор, пока в программе явно не будет установлена переменная окружения H. В листинге 18.5 приведен код более безопасной версии программы directory.cgi. Листинг 18.5. Более безопасная версия программы directory.cgi 1: I!/usr/bin/perl -wT 2: \ Вхгкнт рехин уощат даЕЗЕьк 3: use rdct; 4: use ОЗГ qw(:all); 6: print teaaer; 8: $EHV{PATH>=/bin:/usr/bin 9: nb$dir=param( dirname); 10: t Юзратю лрсаешрлвеаъ чспыю катагпш, 11: # шжщщвся в кагатгв /Ixms/trojects 12: if ($dir=-m,-(/hoBe/projects/l\w/l+)$, ) { 13: $dir:l; I В эгсй теаяшхИ ссдаиагоя "чильв" данЕьв, 14: * см. "perldoc perlsec" 15: pdnt -Is -1 ?dir-; Дополнительная информацио контролю данных и написанию безопасных программ на Per! содержится на странице persec электронного руководства, устанавливаемого вместе с Perl. Невозможные события Форм ML/CGl могут вам доставить и другие неприятности. Посмотрите на фрагмент кода HTML, приведенный в листинге 18.6. Лист18.6. Код HTML эстой форм1 <FORK action="/cgi-bin/doit.cgi"> 2: Пожахста, назовете ваш любимьм цвет: 3: <INPUT TYPE=text length=15 nanie=color> 4: <IKPUT rYPE=sabmit value="3anpoc"> 5: </FORM> В этой форме максимально возможная длина поля color составляет 15 символов, не правда ли? Теоретически, да. Спецификация HTML утверждает, что атрибут length обозначает максимально допустимую длину поля. Но броузер может быть взломан, или злоумышленник модифицирует форму так, чтобы можно было вводить большее количество символов. Если вам нужно, чтобы некоторое поле имело определенное значение или длину, не полагайтесь при проверке только на код HTML, Java или JavaScript. Например, если длина поля color не должна превышать 15 символов, используйте в CGI- программе на Perl подобный код: ш/ $со1ог=рагат(color); t Похчигь исходное значение поля ?color=substr($color, О, 15) ; * Взшъ только пЕраЕ 15 симюлэв Отказ от обслуживания Любой Web-сервер может быть перефужен слишком большим количеством запросов, поступивших от удаленных пользователей. Иногда это происходит по злому умыслу, а иногда - нет. Часто бывает так, что компания размещает свои службы в Web и затем из-за перегруженности сервера большим количеством запросов оказывается вынуждена их свернуть. Ситуация отказа от обслуживания может произойти и с обычными Web-страницами, и с CG1-программами. Вы мало что можете сделать для предотвращения проблемы отказа от обслуживания. Мощности Web-сервера должны быть адекватны количеству пользователей. Если ССЬпрограмма слишком долго выполняется или использует слищком больщое количество системных ресурсов из-за частого доступа к файлам, интенсивного использования центрального процессора, сервер становится уязвим для атак, приводящих к отказу от обслуживания. Поэтому постарайтесь максимально уменьшить и упростить СО I-профамму. Гостевая книга В этом разделе в качестве примера мы рассмотрим настраиваемую гостевую книгу Web-сервера. Под гостевой книгой мы подразумеваем форму HTML, в которой пользователь оставляет свое имя, адрес и комментарии. Гостевая книга может использоваться для обратной связи по данной теме, для организации простой доски объявлений или для отправки вопроса в справочную службу. Все данные сохраняются в файле и могут быть выведены после заполнения формы; кроме того, они выводятся на собственной Web-странице. В листинге 18.7 приведен короткий фрагмент кода HTML, представляющий форму гостевой книги абстрактной службы технической поддержки. Вы можете модифицировать эту форму таким образом, чтобы она соответствовала вашим потребностям. Чт аммирование на erl 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 |