Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация, борьба с подбором пароля 
:(
    Опции темы
Dima85
Дата 24.7.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Есть такой скрипт:
 
Код

#!/usr/bin/perl
use CGI qw(param);
use strict;
use CGI::Carp qw/fatalsToBrowser/;
use Fcntl ':flock';
use Digest::MD5 qw(md5_hex);

***

if (md5_hex($pass) eq 'bcf171c7da8b126152e63987f32c82d1') {
***
}


В последнее время замечаю иногда с разных IP пытаются подобрать пароль. 
Вопрос. Помогите пожалуйста усовершенствовать авторизацию. Допустим если 3 раза введен неправильно пароль, IP блокируется на 15-30 минут.

Собственно я знаю как это сделать с использованием базы данных, или простых файлов. Куда будут записываться количество попыток авторизации и собственно сам IP.
А есть ли возможность это сделать без использования БД или файлов? Поделитесь пожалуйста идеями.



PM MAIL   Вверх
Bulat
Дата 24.7.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(Dima85 @  24.7.2009,  17:25 Найти цитируемый пост)
А есть ли возможность это сделать без использования БД или файлов? Поделитесь пожалуйста идеями.


Чем сложнее программа - тем больше в ней ошибок.. По-моему все же лучше использовать БД и файлы, если нужно, создавая простые решения, но добиваясь тем самым большей надежности smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
arto
Дата 24.7.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 1
Всего: 40



http -- stateless протокол, приделывайте костыли
PM MAIL ICQ   Вверх
Dima85
Дата 24.7.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



А еще есть какие либо способы?

Может какой-то другой вид защиты, но что б это было зез поддержки баз данных и файлов.

Это сообщение отредактировал(а) Dima85 - 24.7.2009, 22:14
PM MAIL   Вверх
DaemonSuw
Дата 24.7.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



http://ru.wikipedia.org/wiki/Captcha - используйте ее и не думайте машинном переборе...
Информацию о ip и вызовах вам надо все равно хранить где то, как реализовать счетчик, если не выгружать информацию в бд или файл? по моему никак! Не в куки же пользователю записывать  smile 
PM MAIL ICQ   Вверх
gcc
Дата 24.7.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



элементарно, логируй дествия, допустим за послдений 1 час

если не правильно ввели с 3 попыток и если больше определенного времени, то закрой доступ перебора пароля на некоторое время
PM WWW ICQ Skype GTalk Jabber   Вверх
Dima85
Дата 24.7.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Цитата(gcc @ 24.7.2009,  22:44)
элементарно, логируй дествия, допустим за послдений 1 час

если не правильно ввели с 3 попыток и если больше определенного времени, то закрой доступ перебора пароля на некоторое время

Как их логировать? Расскажите подробней.

Это сообщение отредактировал(а) Dima85 - 24.7.2009, 23:18
PM MAIL   Вверх
sir_nuf_nuf
Дата 25.7.2009, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 2
Всего: 31



Dima85, Да просто... У вас сильно нагруженная авторизация ? если нет - то я предлагаю начать с самого просто решения - DBM файлы.
Что то вроде того

Код

use Fcntl qw(:DEFAULT :flock);
use DB_File;

my $REMEMBER_ACCESS = 3;
my $EXPIRATION_SEC  = 3600;

sub check_ban {
  my $ip=shift;
  my $db = tie my %db, 'DB_File', "auth_ban.dbm", O_RDWR|O_CREAT|O_EXLOCK, 0600 or die "Can't initialize database: $!";
  
  my @usages = split ';', ($db{$ip} || '');   #load list of usages (in unix times) for current ip
  my $now = time();
  # if 3 or more access during last hour
  my $result = (scalar grep {$now - $_ < $EXPIRATION_SEC} @usages) >= $REMEMBER_ACCESS;
  # left no more than 2 rightest elements
  splice @usages, 0, (@usages - ($REMEMBER_ACCESS - 1)); 
  # add current time to list
  push @usages, $now;
  $db{$ip} = join ';', @usages;
 
  undef $db; untie %db;  #save
  return $result ? 1 : 0;
}


Переменные вы знаете зачем.
В случае неудачной аутентификации скармливаете этой функции ip, а она вам возвращает 1 - бан 0 - пока живет.

Тест: 100 000 уникальных ключей (айпишников) - размер базы ~ 6 метров.
В однопроцессном режиме (без конкуренции за базу) - 9000 проверок в секунду
В многопроцессном (8 процессов конкурируют за базу) - 10600 проверок в секунду.. 
(еще бы, упираемся в flock всего файла)

Вообще связка DB_File + flock хреново себя ведет под нагрузкой/при большой базе. В таком случае надежней BerkeleyDB база (нормальную) =)

Это сообщение отредактировал(а) sir_nuf_nuf - 25.7.2009, 03:56


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
shamber
Дата 25.7.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



sir_nuf_nuf
smile он просил без файлов smile

PM MAIL Jabber   Вверх
sir_nuf_nuf
Дата 25.7.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 2
Всего: 31



вот блин  smile 


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Dima85
Дата 26.7.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



sir_nuf_nuf, интересное решение, спасибо.
Но мне хочеться что-то без использования файлов или бд.
PM MAIL   Вверх
KSURi
Дата 26.7.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 2
Всего: 27



И без использования компьютера)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
sir_nuf_nuf
Дата 27.7.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 2
Всего: 31



Dima85,  вы используете CGI или mod_perl ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
KSURi
Дата 27.7.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 2
Всего: 27



sir_nuf_nuf, если вы намекаете на то, что при использовании mod_perl можно хранить в памяти, то ведь это до первого рестарта. Не надежно получится.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
sir_nuf_nuf
Дата 27.7.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 2
Всего: 31



KSURi,  так ведь это и не банилка. Это что бы слишком часто не ломились. Знаете, как в операционках - ошибся с вводом пароля - 5 сек подожди.. Так и здесь - пару раз ошибся - еще час твои попытки игнорятся. 

Проблема не в том.. проблема в том, что у всех чайлдов апача - своя память. А в случае с CGI - эта память еще и существует несколько секунд. Поэтому для хранения в памяти - нужно использовать shmem..  (которая кстати иногда реализуется через файлы отображаемые в память =))

Это сообщение отредактировал(а) sir_nuf_nuf - 27.7.2009, 12:12


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0817 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.