|
|
Ответов: 0
|
25-02-12 07:01
|
|
|
|
Ответов: 0
|
16-01-12 20:13
|
|
|
|
Ответов: 1
|
09-01-12 11:23
|
|
   Web - программирование
|
|
|
   Программирование под ОС
|
|
|
   Web - технологии
|
|
|
   Базы Данных
|
|
|
|
Web - программирование / PERL /
| |
| | |
Возможно вас заинтересует
|
|
Авторизация и аутентификация без куки
В статье описывается простейший способ реализовать авторизацию и аутентификацию средствами perl не используя cookie.
Введение
Авторизация - предоставление определенных полномочий лицу или группе лиц на выполнение некоторых действий в системе обработки данных. Посредством авторизации устанавливаются и реализуются права доступа к ресурсам.
Аутентификация - процедура проверки подлинности данных и субъектов информационного взаимодействия исключительно на основе внутренней структуры самих данных.
То бишь, авторизация происходит при обработке введённого пароля, а аутентификация - при дальнейшей работе пользователя.
Теория
1. Как бы ни хранился пароль, он должен быть нечитаем даже для того, кто может получить доступ к файлу, в котором хранится пароль.
2. Аутентификация должна проходить так, чтобы аутентификационными данными возможно было воспользоваться только с того компьютера, с которого происходила авторизация.
3. Ещё лучше, если при аутентификации учитываются данные не только идентифицирующие определённый компьютер, но и броузер.
4. Также неплохо реализовать привязку к сессии
К делу
Для начала нужно определиться, какие данные будут использоваться при аутентификации.
для примера возьмём следующие переменные окружения: 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;
|
|
Заключение
Это простейший пример реализации авторизации и аутентификации (ции, млин :) ), исходя из которого можно сотворить просто "шедевр". подключить привязку к сессии, привязку ко времени итдитп.
конечно, существует довольно таки много способов реализовать описанное выше, но я остановился на этом.
Последние статьи: Web - программирование / PERL /
| |
| | |
Большое количество World Wide Web приложений основано на использовании внешних программ, управляемых Web сервером... подробнее
|
Кол. просмотров: общее - 5805 сегодня - 1
|
|
|
Кол. просмотров: общее - 4898 сегодня - 1
|
|
Одним из популярнейших вопросов во всевозможных форумах является вопрос «Как загрузить файл на сервер?». А ведь на самом деле это не так сложно, как кажется на первый взгляд. И чтобы не было совсем легко – пусть скрипт, который приведен ниже еще и посылает этот файл по почте, в виде вложения... подробнее
|
Кол. просмотров: общее - 5316 сегодня - 1
|
|
В статье рассматривается один из основных подходов к генерации динамического контента в среде веб-приложений, а именно использование веб-сценариев и CGI, и применительно к ним, методы защиты исходных текстов от несанкционированного копирования и модификации... подробнее
|
Кол. просмотров: общее - 5005 сегодня - 0
|
|
Disclaimer: все приведённые примеры предназначены для демонстрации принципов, а вовсе не являются готовыми к использованию решениями... подробнее
|
Кол. просмотров: общее - 5042 сегодня - 1
|
|
|
|