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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






 
 
| Добавить в избранное | Сделать стартовой 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