Статьи,обзоры,справочники по PHP


Аутентификация пользователей через Web интерфейс. - часть 2


В общем вся процедура выглядит все где-то так:

#!/usr/bin/suidperl # # читаем форму

......... &check_passwd;

sub check_passwd { my $shadow = "/etc/shadow"; # ниже две строчки = переданные из формы пароль/логин

$plaintext = $form{'password'}; $username = $form{'login'}; # пытаемся открыть файл зашифрованных паролей (на нормальной системе # он доступен только для чтения только root-ом.) # и заодно попытаемся его залочить.

open (SHADOW, "; flock SHADOW, 8; # закроем shadow

close SHADOW;

foreach $line(@shadows) { chomp($line); ($currentuser, $currentpass, $restofline) = split /:/, $line, 3; if ($currentuser eq $username) # Выдергиваем зашифрованный пароль из shadow

$saltedpass = $currentpass; # Проверяем его стандартной функцией crypt

if ( crypt ($plaintext, $saltedpass) eq $saltedpass) { print "Authentification for $username success!\n"; } else { print "Authentification for $username failure!\n"; } } } }

Файлу, содержащему сей "шедевр" программистского искусства следует в целях безопасности установить атрибуты:

Владелец - root

Взведенный бит установки ID пользователя при исполнении режим доступа r-sr-xr-x

грубо говоря, в восьмеричном отображении оно будет выглядеть как 104555

В этом suid-e и кроется опасность, - если кто-то умудрится всунуть кусок своего кода в вашу программу, то сможет получить доступ к вашей системе.

(Для неверующих - прочитайте что-нибудь про Ramen - он еще и не то делает/делал).


А посему сей метод, как небезопасный, лучше не использовать.

Лучше взять готовую Perl-библиотеку: Net.




- Начало -  - Назад -  - Вперед -



Книжный магазин