Понедельник, 23.12.2024, 15:21
HUKER.ucoz.com
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Категории раздела
Информационная безопасность [7]
Хакерство [29]
Криптография [3]
Взлом беспроводных сетей [1]
Взлом сетей [0]
Взлом программ [0]
Взлом сайта [1]
Взлом сервера [0]
Хакеры [4]
Форма входа
Опрос
Как часто вы посещаете наш сайт?
Всего ответов: 353
Статистика


Рейтинг@Mail.ru


Онлайн всего: 1
Гостей: 1
Пользователей: 0
 Каталог статей
Главная » Статьи » Хакеры.Информационная безопасность » Хакерство

авторизация+аутентификация на perl

• Введение
авторизация- предоставление определенных полномочий лицу или группе лиц на
выполнение некоторых действий в системе обработки данных. Посредством авторизации
устанавливаются и реализуются права доступа к ресурсам.
аутентификация- процедура проверки подлинности данных и субъектов информационного
взаимодействия исключительно на основе внутренней структуры самих данных.
то бишь, авторизация происходит при обработке введённого пароля, а аутентификация -
при дальнейшей работе пользователя.
• Теория
0. как бы ни хранился пароль, он должен быть нечитаем даже для того, кто может
получить доступ к файлу, в котором хранится пароль.
1.0. аутентификация должна проходить так, чтобы аутентификационными данными
возможно было воспользоваться только с того компьютера, с которого происходила
авторизация.
1.1. ещё лучше, если при аутентификации учитываются данные не только
идентифицирующие определённый компьютер, но и броузер.
1.2. также неплохо реализовать привязку к сессии
• К делу
0.0. для начала нужно определиться, какие данные будут использоваться при
аутентификации.
для примера возьмём следующие переменные окружения: REMOTE_ADDR,
HTTP_USER_AGENT, HTTP_ACCEPT_LANGUAGE (также на форуме bugtraq
посоветовали использовать HTTP_X_FORWARDED_FOR).
чтобы получить значение какой-либо переменной окружения средствами perl,
используется функция $ENV{}. например $ENV{"REMOTE_ADDR"} при локальном
запуске будет равно "127.0.0.1".
0.1.0. теперь можно определиться с тем, как и где будет храниться пароль.
пароль лучше всего необратимо шифровать, то бишь шифровать самим собой.
для примера будем хранить пароли в файле, имеющем такое же имя, как и логин.
также заранее определимся о максимальной длине логина и пароля. опять же, для
примера, будем использовать 16 и 12 соответственно.
0.1.1. пишем модуль авторизации:
#usr/bin/perl
print "Content-type: text/html ";
#получаем данные авторизации (они должны были отправляться из формы авторизации)
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 )
{
@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;
#переадресуем на страницу с отрицательным результатом авторизации
}
}
как видно, всё очень просто :).
0.2.0. переходим к аутентификации. хеш можно передавать простым GET'ом, т.е.
параметром в адресной строке. к примеру, он будет храниться в переменной auth вместе с
логином вида [auth=login:hash].
модуль аутентификации будет подключаться при работе пользователя и записывать в
переменную $AL значение 1 (авторизован) или 0 (неавторизован). в зависимости от этого
будут работать остальные скрипты.
(поделючать скрипты можно используя функцию require())
0.2.1. пишем модуль аутентификации.
#!/usr/bin/perl
@pairs = split(/:/, $auth);
if (open $a, join("", $ENV{"DOCUMENT_ROOT"}, "/cgi-bin/pws/", @pairs[0], ".auth"))
{
$pass= ;
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;
• Заключение
это простейший пример реализации авторизации и аутентификации (ции, млин :) ), исходя
из которого можно сотворить просто "шедевр". подключить привязку к сессии, привязку
ко времени итдитп.
конечно, существует довольно таки много способов реализовать описанное выше, но я
остановился на этом.

Категория: Хакерство | Добавил: Huker-Admin (24.10.2009)
Просмотров: 1283 | Рейтинг: 3.0/2
Copyright HUKER.ucoz.com © 2024-2012
Облако тегов
измерение скорости

Я.Интернет. Измерьте вашу скорость.