Создание сайта, дизайн, web дизайн
Главная Работы Услуги Цены Контакты

 Главная
 Работы
 Услуги
 Цены
 Контакты
 

В статье описывается простейший способ реализовать авторизацию и аутентификацию средствами perl не используя cookie.

Введение

Авторизация - предоставление определенных полномочий лицу или группе лиц на выполнение некоторых действий в системе обработки данных. Посредством авторизации устанавливаются и реализуются права доступа к ресурсам.

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

То бишь, авторизация происходит при обработке введённого пароля, а аутентификация - при дальнейшей работе пользователя.

Теория

Как бы ни хранился пароль, он должен быть нечитаем даже для того, кто может получить доступ к файлу, в котором хранится пароль.

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

Ещё лучше, если при аутентификации учитываются данные не только идентифицирующие определённый компьютер, но и броузер.

Также неплохо реализовать привязку к сессии

К делу

Для начала нужно определиться, какие данные будут использоваться при аутентификации.

для примера возьмём следующие переменные окружения: REMOTE_ADDR, HTTP_USER_AGENT, HTTP_ACCEPT_LANGUAGE (также на http://www.bugtraq.ru/forum/ посоветовали использовать HTTP_X_FORWARDED_FOR).

Чтобы получить значение какой-либо переменной окружения средствами perl, используется функция $ENV{}. например $ENV{"REMOTE_ADDR"} при локальном запуске будет равно "127.0.0.1".

Теперь можно определиться с тем, как и где будет храниться пароль.

пароль лучше всего необратимо шифровать, то бишь шифровать самим собой.

для примера будем хранить пароли в файле, имеющем такое же имя, как и логин.

также заранее определимся о максимальной длине логина и пароля. опять же, для примера, будем использовать 16 и 12 соответственно.

Пишем модуль авторизации:

#usr/bin/perl

print "Content-type: text/htmlnnn";

#получаем данные авторизации (они должны были отправляться из формы авторизации)

read(STDIN, $buffer, $ENV{"CONTENT_LENGTH"});

@pairz = split(/&/, $buffer);

$a= 0;

foreach $pair (@pairz)

{

$pair =~ tr/+/ /;

$pair =~ s/&/&/gi;

$pair =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

@pairz[$a]= $pair;

$a++;

}

#передаём данные для авторизации в массив login

#обрезая имена переменных (в данном случае- login и pass)

@login[0]= substr(@pairz[0], 6, 24);

@login[1]= substr(@pairz[1], 5, 32);

#проверяем валидность пары логин/пароль

#если файл с паролем существует и пароль валиден- выдаём уровень доступа

if (open $pw, join("", "pws/", @login[0], ".pw")

{

if (crypt(@login[1], @login[1]) eq <$w>)

{

@g3tz= ($ENV{"REMOTE_ADDR"}, $ENV{"HTTP_USER_AGENT"}, $ENV{"HTTP_ACCEPT_LANGUAGE"});

foreach $g3tz (@g3tz)

{

foreach $cr (split("", $g3tz))

{

$auth0z+= ord($cr);

}

}

$AL= 1;

#тут переадресуем на страницу с положительным результатом авторизации (и передаём crypt($auth0z, $pass))

} else

{

$AL= 0;

#переадресуем на страницу с отрицательным результатом авторизации

}

}

Как видно, всё очень просто :)

Переходим к аутентификации. хеш можно передавать простым GET'ом, т.е. параметром в адресной строке. к примеру, он будет храниться в переменной auth вместе с логином вида [auth=login:hash].

модуль аутентификации будет подключаться при работе пользователя и записывать в переменную $AL значение 1 (авторизован) или 0 (неавторизован). в зависимости от этого будут работать остальные скрипты. (подключать скрипты можно используя функцию require())

Пишем модуль аутентификации.

#!/usr/bin/perl

@pairs = split(/:/, $auth);

if (open $a, join("", $ENV{"DOCUMENT_ROOT"}, "/cgi-bin/pws/", @pairs[0], ".auth"))

{

$pass= <$a>;

close $a;

@g3tz= ($ENV{"REMOTE_ADDR"}, $ENV{"HTTP_USER_AGENT"}, $ENV{"HTTP_ACCEPT_LANGUAGE"});

foreach $g3tz (@g3tz)

{

foreach $p1 (split("", $g3tz))

{

$auth0z+= ord($p1);

}

}

if (crypt(@pairs[1], @pairs[1]) eq crypt($auth0z, $pass))

{

$AL= 1;

} else

{

$AL= 0;

}

} else

{

$AL= 0;

}

return true;

Заключение

Это простейший пример реализации авторизации и аутентификации (ции, млин :) ), исходя из которого можно сотворить просто "шедевр". подключить привязку к сессии, привязку ко времени итдитп.

конечно, существует довольно таки много способов реализовать описанное выше, но я остановился на этом.




нет данных http://internet-technologies.ru/articles/page_1/article_93.html
Состояние воздуха:
Мониторинг загрязнения атмосферы в режиме реального времени
© 2004-2017 LABDESIGN.RU   e-mail: