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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






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