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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






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