П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 182846 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 82383 раз(а).

Учебник HTML.
Просмотров 77239 раз(а).

Руководство по PHP5.
Просмотров 48112 раз(а).

Хостинг через призму DNS.
Просмотров 55638 раз(а).

Подборка текстов стандартных документов.
Просмотров 47513 раз(а).

Учебник PHP - Самоучитель
Просмотров 53942 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 54915 раз(а).

Внешние атаки...
Просмотров 44413 раз(а).

Учебник PHP.
Просмотров 39596 раз(а).

SSI в примерах.
Просмотров 29509 раз(а).






 
 
| Добавить в избранное | Сделать стартовой Project.Net.Ru | Помощь





Perl скрипты

Перевод строки

Скрипт finger.cgi выполняет инструкцию finger на нашей машине:

#finger.cgi

print "<BODY>";
$login = $input{'login'};
$login =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"])/\\$1/g;
print "Login $login<BR>\n";
print "Finger<BR>\n";
$CMD= "/usr/bin/finger $login|";
open(FILE,"$CMD") || goto form;
print <FILE>

Этот скрипт по крайней мере предпринимает полезную меру предосторожности: он заботится, чтобы ненужные символы не были интерпретированы оболочкой, помещая '\' перед ними. Таким образом, точка с запятой заменяется на "\;" при помощи регулярного выражения. Однако список не содержит все интересные символы. Среди них нет перевода строки '\n'.

В командной строке вашей любимой оболочки вы активизируете инструкцию, нажимая клавишу Ввод, которая передает символ '\n'. В Perl вы можете делать то же самое. Мы уже видели, что инструкция open() позволяет нам выполнять команду, если строка оканчивается символом канала '|'.

Чтобы смоделировать такое поведение, мы добавим возврат каретки и инструкцию после имени, которое посылается команде finger:

finger.cgi?login=kmaster%0Acat%20/etc/passwd

Другие символы, которые позволяют исполнить различные инструкции в одной строке:

  • ;  : после окончания первой инструкции, выполняется следующая;
  • &&  : если результат выполнения первой инструкции успешен (т.е. она возвратила 0 оболочке), то выполняется следующая;
  • ||  : при ошибочном выполнении первой инструкции (т.е. она возвратила ненулевое значение оболочке), выполняется следующая.

Эти символы не работают в данном примере, т.к. они обрабатываются регулярным выражением. Однако, найдем способ решить эту проблему.

[ Назад ] [ Содержание ] [ Вперед ]



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru