П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

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

MySQL

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

Хостинг

Другое







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

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

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

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

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

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

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

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

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

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

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

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






 
 



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-2011 Project.Net.Ru


Женские купальники с доставкой - купальники в Москве. Купальники и бикини.