Люди добрые, написал скрипт авторизации, но пока не закидываю на хостинг - опасаюсь за безопасность. Прочитал несколько статей о безопасном cgi-программировании, но так ничего толком и не понял. Объясните на примере моего скрипта его слабые стороны, способы защиты и взлома (для того что бы понимать от чего защищаться)
#!/usr/bin/perl -wTI /home/../cgi-bin/config
use CGI qw(:standard);
use CGI::Session( '-ip_match' );
use CGI::Session::Driver::mysql;
use strict;
use DBI;
use CGI::Cookie;
use myconfig;
if ((param('id')=~ (/^[0-9]+$/)) and (length(param('id'))<10))#проверяю код на содержание только цифер
{
if ((param('pass')=~ (/^[a-zA-Z0-9]+$/)) and (length(param('pass'))<13))#проверяю пароль на содержание только цифер и латинских символов
{
my $id=param('id');
my $pass = param('pass');
my ($dbh,$rv, $st, @row);
$dbh = DBI->connect("dbi:mysql:database=$myconfig::db:host=$myconfig::host", $myconfig::us, $myconfig::pass)or print"err01";#коннект к базе на локалхосте хостинга
$st = $dbh->prepare("select mail from user where id=$id and pass=$pass;");/проверяю наличие пользователя в базе
$st->execute()or print"err08";
@row=$st->fetchrow_array;
my $sid=undef;
if ($row[0]eq '')#если пользователя нет на всяк случай (не знаю на какой) стираю ему кук
{
my $coo = new CGI::Cookie(-name=>'session', -value=>undef);
print header(-charset=>'Windows-1251',-cookie=>$coo);
print"err07";
exit;
}
else#если пользователь найден в бд открываю ему сессию: создаю запись в бд сессий и отправляю кук с идентификатором сессии
{
my $dbh_sess = DBI->connect("dbi:mysql:database=$myconfig::db_s:host=$myconfig::host_s", $myconfig::us_s, $myconfig::pass_s)or print"err19";
my $session = CGI::Session->new('driver:mysql', $sid, { 'Handle' => $dbh_sess });
$st = $dbh->prepare('select l0, l1, l2 from user where id='.$id.';');#выбираю кой-какие данные
$st->execute()or print"err08";
@row=$st->fetchrow_array;
my $cookie = new CGI::Cookie(-name=>'session',-value=>$session->id() ,-expires => '+1h');
print header(-cookie=>$cookie)or print"err16";
print 'l0'.$row[0].'l1'.$row[1].'l2';
}
}
else #иф с паролем
{
print "Content-Type:text/html\n\n";
print"err04";
}
}
else # иф с кодом
{
print "Content-Type:text/html\n\n";
print"err09";
}