Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: $_GET в CGI
 
 автор: EXP   (25.07.2007 в 14:16)   письмо автору
 
 

попробовал сделать простенький скрипт.pl , получающий одну только $_GET['dir'] , ;)
#!/usr/bin/perl 
print "Content-Type: text/html\n\n";

$method = $ENV{'REQUEST_METHOD'}; 
if ($method eq "GET") {  
$form_data = $ENV{'QUERY_STRING'};
} else { 
read (STDIN, $form_data, $ENV{'CONTENT_LENGTH'}); 


$form_data =~ s/%(..)/pack ("C", hex ($l))/eg; 
$form_data =~ tr/+/ /; 
@pairs = split(/&/, $form_data); 

foreach $pair (Spairs) 

($name, $value)=split(/=/,$pair); 
$FORM{$name}=$value; 
}

if (!$FORM{'dir'}) {
$dir = "D:\\WebServers\\home\\localhost\\www";
} else {
$dir = $FORM{'dir'} ;
}

, ещё и не пойму где ошибка :) Там нет такого как в php простого $dir = $_GET['dir'] ?


Одну ошибку нашёл S вместо $, что-то загадочное в этом $form_data =~ s/%(..)/pack ("C", hex ($l))/eg;
, и что за $l ? Вырезал с Perl.chm из /downloads/

   
 
 автор: Unkind   (25.07.2007 в 15:52)   письмо автору
 
   для: EXP   (25.07.2007 в 14:16)
 

$1 - в данном случае это переменная создается от регулярного выражения %(..). Такой rawurldecode() я бы сказал.

   
 
 автор: EXP   (25.07.2007 в 19:15)   письмо автору
 
   для: Unkind   (25.07.2007 в 15:52)
 

похоже настроил ; получается что-то типа этого

$method = $ENV{'REQUEST_METHOD'}; 
if ($method == "GET") {  
$form_data = $ENV{'QUERY_STRING'};
} else { 
$form_data =~ s/%(..)/pack("C", hex($1))/eg; 
}
$form_data =~ tr/+/ /; 
@pairs = split(/&/, $form_data);
foreach $pair (@pairs) 

($name, $value) = split(/=/, $pair); 
$FORM{$name}=$value; 
}
if (!$FORM{'dir'}) {
$dir = "D:\\WebServers";
} else {
$dir = $FORM{'dir'} ;
}

, только $_POST'ом ещё не тестил , и не понятно чем наоборот rawurlкодировать ;)

   
 
 автор: Unkind   (25.07.2007 в 19:53)   письмо автору
 
   для: EXP   (25.07.2007 в 19:15)
 

Как-нибудь так:

#!/usr/bin/perl

sub rawurlencode($)
{
    $result = '';

    for($i = 0; $i < length($_[0]); $i++)
    {
        $lttr = substr($_[0], $i, 1);
        $ord = ord($lttr);

        if($ord == 0x2E || ($ord > 0x61 && $ord < 0x7A) || ($ord > 0x41 && $ord < 0x5A))
        {
            $result .= $lttr;
        }
        else
        {
            $result .= '%' . sprintf('%02X', $ord);
        }
    }

    return $result;
}

print('Content-type: text/plain; charset=utf-8' . (chr(13) . chr(10) x 2));

$string = 'String...!@#$';

print(rawurlencode($string));


Только мм я не понял, а как выдрать один байт из скаляра, чтобы Perl не путал это с запросом элемента хеша или массива?

UPD. А вообще-то...
$string =~ s/([^a-zA-Z\.]{1})/sprintf('%%%02X', ord($1))/eg;

:))

   
 
 автор: Trianon   (25.07.2007 в 20:03)   письмо автору
 
   для: Unkind   (25.07.2007 в 15:52)
 

Крайне грязный код.
Как и большинство perl-кода впрочем.

Не знаю, можно ли тут впихнуть инъекцию ....
Но ошибки в декодировании параметров точно есть.
Видно, что и амперсенд и знак равенства могут быть подсажены из пользовательских данных, и как результат, мы имеем по меньшей мере - искажение кода. А по пущей - генерацию навязанных переменных формы.

Вот почему я не люблю перл.
Люди, которые программируют на нем (не все, конечно, но изрядная часть людей)
мнят себя профессионалами, не являясь ими ну никак.
А ведь невооруженным глазом не разглядишь....


Я не про нас, тут собравшихся... я про того, кто этот код в открытый доступ выложил....
Ну не умеешь петь - не пей!
Нет. Будут ведь же...

А перл, такой язык, который на все эти грязные приемчики, достойные лишь того, чтоб тихонечко себе отчетик в уголку накропать - а он и создан был для этого!!! - он на них провоцирует.

   
 
 автор: Unkind   (25.07.2007 в 20:41)   письмо автору
 
   для: Trianon   (25.07.2007 в 20:03)
 

Вы ответили мне на сообщение 25.07.2007 в 15:52? А почему мне? :)

   
 
 автор: Trianon   (25.07.2007 в 20:53)   письмо автору
 
   для: Unkind   (25.07.2007 в 20:41)
 

Ошибся.

   
 
 автор: Unkind   (25.07.2007 в 20:57)   письмо автору
 
   для: Trianon   (25.07.2007 в 20:53)
 

Ошиблись где? В том, что сообщение не мне или в том, что выбрали сообщение не с той датой? :)

   
 
 автор: Unkind   (25.07.2007 в 20:57)   письмо автору
 
   для: Trianon   (25.07.2007 в 20:53)
 

-

   
 
 автор: Trianon   (25.07.2007 в 21:01)   письмо автору
 
   для: Unkind   (25.07.2007 в 20:57)
 

>Ошиблись где? В том, что сообщение не мне или в том, что выбрали сообщение не с той датой? :)

Сообщение адресовано всем, в общем-то.
Выбирать Вашу (235609) реплику, как точку привязки своей, у меня никаких оснований не было. Перепутал с 235560.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования