·
· «/html»
·
· #!/usr/local/bin/perl
· print "Content-type: text/html\n\n";
· print "«HEAD» «title»VIRTUAL SHOPs 'Hamburg'«/title»«/head»\n";
· print "«BODY» «H1»«CENTER»VIRTUAL SHOPs '«U»Hamburg«/U»'«/H1»«/CENTER»«HR»«BR»\n";
·
· parseparameters();
· $Name=$parameters{'name'};
· $Card=$parameters{'card'};
· $Passwd="None";
· $file="users.dat";
·
· open(F,"«$file") || die "File $file not exist!\n";
·
· while($f=«F»)
· {
· $tmp=«F»;
· if ("$Name\n"=~$f)
· {
· if ($tmp!~$Card)
· {
· print "«CENTER»«H1»Wrong Card Number«/H1»«HR»";
· die;
·}
·
· $Passwd=$tmp;
·}
·}
·
· if ($Passwd=~/None/)
· {
· open(F,"»$file");
· print F "$Name\n";
· print F "$Card\n";
· close(F);
· print "«B»New Buyer!«/B»«BR»\n";
·}
·
· print «EOF;
· Buyer:$Name
· «BR»
· Card:$Card
· «TABLE width=100% border=1»
· «TR»
· «TH»Product ID
· «TH»Product Name
· «TH»Purchase
· «TR»
· «TD»Y2ZA
· «TD»Mice
· «TD»1 dollar
· «TR»
· «TD»ZG6T
· «TD»Mice Pad
· «TD»5 dollar
· «TR»
· «TD»3 FZ9Y
· «TD»CD-ROM RACK
· «TD»7 dollar
· «/table»
· «HR»
· «CENTER»
· «form method="POST" action="buy.pl"»
· Product ID:
· «input type="text" size="30" maxlength="30" name="$Name"; value="Y2ZA"»
· «input type="submit" value="Buy"»
· «/form»
· EOF
·
·
·
· sub parseparameters(;$) {
· local $_ = shift || $ENV{"REQUEST_METHOD"};
· my $buffer;
·
· $buffer = $ENV{"QUERY_STRING"} if (/^[Gg][Ee][Tt]$/);
· read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"}) if (/^[Pp][Oo][Ss][Tt]$/);
·
· @_ = split(/ amp;/, $buffer);
· for (@_) {
· tr/+/ /;
· s/%(…)/pack("c",hex($1))/ge;
· (my $key, my $value) = split(/=/, $_);
· $parameters{lc($key)} = $value;
·}
·}
·
Если ввести имя пользователя и код кредитной карточки [302] (например, “Kris Kaspersky; oc674-ui56”) и нажать кнопку “Welcome”, то сервер поприветствует нового покупателя и предложит ввести код товара для покупки. На первый взгляд все работает нормально…
Рисунок 025 Импровизированный виртуальный магазин
Для того чтобы совершить покупку от чужого имени требуется знать номер кредитной карточки, который известен только ее обладателю. Но в данном случае сервер хранит информацию обо всех посетивших его пользователях, и существует возможность «подсунуть» чужое имя взамен своего. Для изучения содержимого странички, необходимо выбрать в меню браузера пункт «Просмотри в виде HTML»
Рисунок 026 Просмотр содержимого странички в виде HTML
Появится следующий код, содержащий, по крайней мере, одну грубейшую ошибку, которая позволяет осуществлять покупки от имени чужих лиц.
· «TH»Product ID
· «TH»Product Name
· «TH»Purchase
· «TR»
· «TD»Y2ZA
· «TD»Mice
· «TD»1 dollar
· «TR»
· «TD»ZG6T
· «TD»Mice Pad
· «TD»5 dollar
· «TR»
· «TD»3 FZ9Y
· «TD»CD-ROM RACK
· «TD»7 dollar
· «/table»
· «HR»
· «CENTER»
· «form method="POST" action=" buy.pl "»
· Product ID:
· «input type="text" size="30" maxlength="30"
· name="Fox"; value="Y2ZA"»