На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Защита  сценариев cgi

Существует два метода защиты сценариев CGI. Первый из них заключается в использовании только тех данных, которые не могут повредить системе, а вто­рой — в проверке входных данных. Например, Ш<ги</егможет позволить пользо­вателям отправлять электронную почту без привлечения оболочки. Для этого он должен применить следующие операторы:
open(MAIL, "I/usr/lib/sendmail -1") ; print MAIL "To:
Благодаря этим операторам компьютер больше не будет передавать сценарию не­надежные данные. Однако сервер передает программе sendmail непроверенные
данные. Поэтому вы избавитесь от проблем с оболочкой, но взамен получите
проблемы с внешней программой (в нашем случае это программа sendmail). Хакер может воспользоваться этим недостатком и передать программе некорректные данные. Например, если вы используете каталог usr/ucb/mail (а не usr/lib/ sendmail) ,то в некоторых системах Unix программа может воспринимать escape-no-следовательности и выполнять команды. Прежде чем передать программе непро­веренные данные, ознакомьтесь с ее описанием.
В Perl можно использовать system и exec без разветвления оболочки. Для этого нужно воспользоваться аргументами команд:
system('/usr/games/fortune',   '-о');
Кроме того, можно использовать вместо команды рореп команду open (без вызо­ва оболочки). Для этого нужно воспользоваться следующей командой:
open(FH,   '[-')   II exec("program",  $argl, $arg2);
Вдобавок используйте приведенный ниже фрагмент для предотвращения атак с использованием метасимволов:
unless($recipient = ~ /А[\w@\.\"]+$/) {
# Наберите здесь HTML-текст, указывающий пользователю на его
ошибку '
exit(l); }
После проведения начальной проверки нужно проверить данные и убедиться в том, что их можно безопасно использовать в оболочке. Предыдущий фрагмент программы определяет, что является безопасным, но не определяет небезопас­ные символы. Далее приводится текст программы проверки входных данных на наличие специальных символов оболочки:
if($to =~ tr/;<>*|'&$!#(} []{}:'"//) {
# Наберите здесь HTML-текст, указывающий пользователю на его
ошибку
exit(l);
}
Вместо того чтобы отбрасывать все метасимволы, можно помещать перед ними символ Escape и передавать программе модифицированные таким образом дан­ными. Для этого воспользуйтесь следующей подпрограммой:
sub esc_chars л, {
# будем изменять, например, а!!а на а\!\!а
0   — s/( [ ;<>\*\Г с\$!«\(\)\[\] \{\> : '"] )Л\$1/д;
return
1
Однако достаточно рискованно указывать небезопасные (вместо безопасных) символы. В предыдущем примере пропущены некоторые метасимволы. Во-пер­вых, символ «А» используется в некоторых оболочках для работы с конвейером. Поэтому перед ним также нужно поставить символ Escape. Во-вторых, в этой подпрограмме упущен символ перехода на новую строку (\п). В некоторых слу­чаях можно использовать этот символ в качестве разделителя команд. Однако самым опасным упущенным символом является, пожалуй, сам символ Escape. В качестве такого символа в Unix обычно используется обратная наклонная чер­та (\). Предположим, что вы передали предыдущей подпрограмме следующую строку:
deltree\*.*
В результате своей работы подпрограмма выдаст следующее значение: ; deltreeW*.*
Напоследок отмечу, что в приведенной подпрограмме пропущены также мета­символы знака вопроса (?) (он используется как символ шаблона) и символ ASCII с номером 255, использующийся в некоторых оболочках в качестве разде­лителя.
Предупрежден CERT
Как уже говорилось, сценарии CGI могут нанести вред и веру, и броузеру. В настоящее время стала очень популяр­ной атака, связанная с недостатком в сценарии В связи с этим координационный центр CERT рекомендует пользователям каталог
Недостаток сценария nph-test-cgi заключается в том, что пользователи Web могут (используя демонов HTTP) считывать листинги файлов, на которые у них нет прав чтения. Этот сценарий разработан для отображения информа­ции об окружении Web-севера. Однако он достаточно плохо проверяет вве- . денные пользователем данные, что позволяет хакерам просматривать файлы хоста. Благодаря этому пользователи могут считывать листинги файлов, на которые у них нет прав чтения. Кроме того, этой ошибкой могут воспользо­ваться люди, не обладающие учетной записью в системе. Группа CERT/CC рекомендует пользователям удалить этот сценарий из системы.
РЕШЕНИЕ ПРОБЛЕМЫ
Если возможно, удалите из системы сценарий nph-test-cgi. Если же вы не можете этого сделать, то воспользуйтесь приведенными ниже рекомендаци­ями по работе с этим сценарием. (Кроме того, посетите Web-сайт CERT.)
Во-первых, удалите или запретите использование сценария nph-test-cgi. Неко­торые Web-серверы содержат этот сценарий по умолчанию. Поэтому просмот­рите каталог cgi-bin, - может быть, сценарий расположен там. Если это так, то удалите его или запретите выполнение этого файла. Для работы дан­ного сценария не обязательно использование HTTPD. Обратите внимание: Web-сервер может содержать несколько каталогов cgi-bin. Просмотрите их все. Например, на сервере NCSA HTTPD можно указать иные места хране­ния сценариев. Для этого нужно воспользоваться в файле вой ScriptAlias Чтобы узнать, используется ли эта директива в вашей систе­ме, ознакомьтесь с документацией на сервер. Если это так, то вы должны удалить сценарий nph-test-cgi или воспользоваться решением, ным в следующем параграфе.
Во-первых, измените Если вам нельзя обойтись
без сценария nph-test-cgi, то вы должны отредактировать этот файл. Про­смотрите его и заключите в двойные кавычки все переменные, отображае­мые с помощью оператора echo:
■, echo QUERY_STRING ■ $QUERYjSTRING      'старая Строка echo QUERYJSTRING = "$QUERY_STRING"   'отредактированная строка
Автор настоятельно рекомендует вам посетить Web-сайт организации CERT, расположенный по адресу http://www.cert.org/Jau*BU найдете описание не­которых других вопросов использования сценариев CGI,
ОСНОВНЫЕ ПРАВИЛА   РАБОТЫ  СО   СЦЕНАРИЯМИ PERL
Существует несколько основных правил работы со сценариями Perl и CGI. Вы должны придерживаться этих правил для создания безопасных сценариев.
Языки вроде Perl и оболочки Bourne содержат команду eve/, с помощью которой можно построить строку и заставить интерпретатор выполнить ее. Посмотрите
на следующую команду оболочки Bourne. Она преобразует строку запроса в на­бор команд:
eval 'echo $QOERY_STRING |   awk 'BEGIN{RS="6"} {printf "QS_%S\n",$1}' '
• К сожалению, хакер может атаковать приведенный выше сценарий по­средством строки запроса, в начале которой стоит точка с запятой. Не
забывайте об этой возможности.
• Обычно клиенты избегают использования в строке запроса символов, име­ющих специальное значение в оболочке Bourne. Однако это отнюдь не касается хакеров. Благодаря таким символам они постараются вывести сценарий из строя и получить таким образом доступ к системе.
• Будьте предельно осторожны с командами system ирореп. Если вы переда­ете этим командам данные клиента, не забудьте поставить перед каждым специальным символом обратную наклонную черту. Для этого достаточно написать небольшую программу на языке С.
• Отключите дополнения стороны сервера. Если ваш сервер поддерживает до­полнения, отключите их использование для каталогов со сценариями. Хакеры могут передать сценарию некорректные данные и тем самым вы­звать сбой в работе дополнений.
ВОПРОСЫ  БЕЗОПАСНОСТИ JAVASCRIPT
Вся предыдущая часть главы была посвящена описанию сценариев CGI и языку программирования Perl, а также связанным с ними вопросам безопасности. Теперь же мы приступаем к рассказу о новом языке разработки сценариев JavaScript.
Как уже говорилось в главе 13, Java — это язык программирования, с помощью которого можно создавать анимированные Web-сайты, включающие графику, звук, диалоговые окна и многие другие элементы. Однако для создания аппле-тов Java вы должны обладать некоторыми навыками программирования.
Чтобы установить «мост» между программистами и разработчиками Web-стра­ниц, компания Sun Mycrosystems (создатель языка программирования Java) раз­работала JavaScript. Как и Perl, JavaScript является языком разработки сценари­ев. С его помощью можно создавать интерактивные Web-страницы.
Благодаря JavaScript разработчики могут создавать сайты с формами.
Создание интерактивной формы с помощью JavaScript.
Так как JavaScript выполняется на стороне клиента (внутри броузера), то с его помощью можно создать сайт с работающим в реальном времени интерактивным калькулятором (13).
iMii ijtii■ Wilms■ liarfiilfcii ii111in мi ■!■ ......» ........\
Создание интерактивного калькулятора с помощью JavaScript.
Для того чтобы работать с языком JavaScript, вам необходим текстовый редактор (вроде Блокнота). С его помощью вы будете создавать HTML-файл. В этот файл можно добавить операторы JavaScript так, как это будет показано в этой главе.
ГДЕ     РАСПОЛАГАЕТСЯ JAVASCRIPT
Как и Perl, JavaScript является языком разработки сценариев. В отличие от сцена­риев Perl, которые выполняются на сервере, сценарии JavaScript выполняются на стороне клиента (в броузере). Для создания сценария JavaScript вы просто вклю­чаете операторы JavaScript в файл HTML. Например, следующий HTML-файл, JSDemo.html использует HTML-тег <SCRIPT> чтобы включить несколько простых операторов JavaScript:
<HTML>
<HEADXTITLE>JavaScript Demo</TITLEX/HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!- Пр5гчем JavaScript document.write("<BR>"); document.write("Chapter 20<BR>"); document.write("Hello, JavaScript!<BR>");
// перестаем прятать текст программы —>
</ S CRT. РТХ /BOD YX / RTML>
В этом сценарии используется функция document.write, чтобы послать сообще­ние броузеру, а также тег <BR> для перевода каретки и перехода на новую стро­ку. Если просматривать этот HTML-файл с помощью Netscape Navigator, то на экране вы увидите текст, аналогичный приведенному
Как и в случае Java, не все броузеры поддерживают сценарии JavaScript. Одна­ко, если считать, что большинство пользователей работает с Netscape Navigator
или Internet Explorer, то можно спокойно внедрять сценарии JavaScript в свои
Web-страницы.
Примечание. В отличие от Java, для использования Java Scrip не нужен компиля­тор или инструментарий разработчика. Вместо этого вам необходим броузер (вроде Netscape Navigator или Internet Explorer), поддерживающий JavaScript. Можно со­здавать HTML-файлы (6), содержащие элементы JavaScript. Для выпол­нения сценариев JavaScript достаточно указать в строке UR/следующую конструк­цию: файл://с: \некоторый_путь.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика