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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






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





Perl скрипты

В этом параграфе мы рассмотрим дыры в безопасности, относящиеся к CGI скриптам, написанным на Perl. Для простоты мы не будем давать полный код примеров, а только части, которые необходимы для понимания, где находится проблема.

Каждый из наших скриптов построен по следующему шаблону:

#!/usr/bin/perl -wT
BEGIN { $ENV{PATH} = '/usr/bin:/bin' }
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};   # Сделаем %ENV безопаснее =:-)
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>";
print "<TITLE>Удаленная команда</TITLE></HEAD>\n";
&ReadParse(\%input);
# теперь можно использовать $input, например, так:
# print "<p>$input{filename}</p>\n";
# #################################### #
# Начало описания проблемы             #
# #################################### #



# ################################## #
# Конец описания проблемы            #
# ################################## #

form:
print "<form action=\"$ENV{'SCRIPT_NAME'}\">\n";
print "<input type=text name=filename>\n </form>\n";
print "</BODY>\n";
print "</HTML>\n";
exit(0);

# Первый аргумент должен быть ссылкой на хэш.
# Хэш будет заполнен данными.
sub ReadParse($) {
  my $in=shift;
  my ($i, $key, $val);
  my $in_first;
  my @in_second;

  # Считывание данных
  if ($ENV{'REQUEST_METHOD'} eq "GET") {
    $in_first = $ENV{'QUERY_STRING'};
  } elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
    read(STDIN,$in_first,$ENV{'CONTENT_LENGTH'});
  }else{
    die "ОШИБКА: неизвестный метод запроса\n";
  }

  @in_second = split(/&/,$in_first);

  foreach $i (0 .. $#in_second) {
    # Замена плюсов пробелами
    $in_second[$i] =~ s/\+/ /g;

    # Разбиение на ключ и значение
    ($key, $val) = split(/=/,$in_second[$i],2);

    # Перевод %XX из шеснадцетиричных чисел в символы
    $key =~ s/%(..)/pack("c",hex($1))/ge;
    $val =~ s/%(..)/pack("c",hex($1))/ge;

    # Сопоставление ключа и значения
    # \0 - разделитель нескольких значений
    $$in{$key} .= "\0" if (defined($$in{$key}));
    $$in{$key} .= $val;

  }
  return length($#in_second);
}

Подробнее об аргументах, переданных Perl (-wT), поговорим попозже. Мы начинаем с очистки переменных окружения $ENV и $PATH и посылаем HTML заголовок (это часть html протокола между браузером и сервером. Вы не можете ее видеть на странице, отображенной в браузере). Функция ReadParse() читает аргументы, переданные скрипту. Это можно было бы проще сделать при помощи модуля, однако так вы не увидели бы весь код. Затем, мы вставляем код примера. И в конце завершаем HTML файл.

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



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





Copyright © 2005-2016 Project.Net.Ru