![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Есть такой скрипт:
В последнее время замечаю иногда с разных IP пытаются подобрать пароль. Вопрос. Помогите пожалуйста усовершенствовать авторизацию. Допустим если 3 раза введен неправильно пароль, IP блокируется на 15-30 минут. Собственно я знаю как это сделать с использованием базы данных, или простых файлов. Куда будут записываться количество попыток авторизации и собственно сам IP. А есть ли возможность это сделать без использования БД или файлов? Поделитесь пожалуйста идеями. |
|||
|
||||
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Чем сложнее программа - тем больше в ней ошибок.. По-моему все же лучше использовать БД и файлы, если нужно, создавая простые решения, но добиваясь тем самым большей надежности ![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 1 Всего: 40 |
http -- stateless протокол, приделывайте костыли
|
|||
|
||||
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
А еще есть какие либо способы?
Может какой-то другой вид защиты, но что б это было зез поддержки баз данных и файлов. Это сообщение отредактировал(а) Dima85 - 24.7.2009, 22:14 |
|||
|
||||
DaemonSuw |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: нет Всего: 3 |
http://ru.wikipedia.org/wiki/Captcha - используйте ее и не думайте машинном переборе...
Информацию о ip и вызовах вам надо все равно хранить где то, как реализовать счетчик, если не выгружать информацию в бд или файл? по моему никак! Не в куки же пользователю записывать ![]() |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
элементарно, логируй дествия, допустим за послдений 1 час
если не правильно ввели с 3 попыток и если больше определенного времени, то закрой доступ перебора пароля на некоторое время |
|||
|
||||
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Как их логировать? Расскажите подробней. Это сообщение отредактировал(а) Dima85 - 24.7.2009, 23:18 |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
Dima85, Да просто... У вас сильно нагруженная авторизация ? если нет - то я предлагаю начать с самого просто решения - DBM файлы.
Что то вроде того
Переменные вы знаете зачем. В случае неудачной аутентификации скармливаете этой функции ip, а она вам возвращает 1 - бан 0 - пока живет. Тест: 100 000 уникальных ключей (айпишников) - размер базы ~ 6 метров. В однопроцессном режиме (без конкуренции за базу) - 9000 проверок в секунду В многопроцессном (8 процессов конкурируют за базу) - 10600 проверок в секунду.. (еще бы, упираемся в flock всего файла) Вообще связка DB_File + flock хреново себя ведет под нагрузкой/при большой базе. В таком случае надежней BerkeleyDB база (нормальную) =) Это сообщение отредактировал(а) sir_nuf_nuf - 25.7.2009, 03:56 |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
sir_nuf_nuf,
![]() ![]() |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
вот блин
![]() |
|||
|
||||
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
sir_nuf_nuf, интересное решение, спасибо.
Но мне хочеться что-то без использования файлов или бд. |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
И без использования компьютера)
-------------------- Died at Life.pl line 21 |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
Dima85, вы используете CGI или mod_perl ?
|
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
sir_nuf_nuf, если вы намекаете на то, что при использовании mod_perl можно хранить в памяти, то ведь это до первого рестарта. Не надежно получится.
-------------------- Died at Life.pl line 21 |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
KSURi, так ведь это и не банилка. Это что бы слишком часто не ломились. Знаете, как в операционках - ошибся с вводом пароля - 5 сек подожди.. Так и здесь - пару раз ошибся - еще час твои попытки игнорятся.
Проблема не в том.. проблема в том, что у всех чайлдов апача - своя память. А в случае с CGI - эта память еще и существует несколько секунд. Поэтому для хранения в памяти - нужно использовать shmem.. (которая кстати иногда реализуется через файлы отображаемые в память =)) Это сообщение отредактировал(а) sir_nuf_nuf - 27.7.2009, 12:12 |
|||
|
||||
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Сейчас пришла очередная идея. Если нельзя заблокировать IP то может можно хотя бы усложнить жизнь роботам подбирающим пароли.
Как вы смотрите на то если сделать задержку на авторизацию, если конечно возможно такое реализовать на perl. Тоесть мы вводим пароль, если он неправильный join.pl выводит надпись вы заблокированы на 5,10 секунд и к нему неимеет доступ никто в течение этого времени (тоесть не может пройти авторизацию). Дописывая это сообщение пришел в голову достаточно большой недостаток. Ведь если робот будет подбирать пароль и в это время я буду проходить авторизацию - у меня мало шансов т.к. мой join.pl постоянно будет в ожидание. Или я ошибаюсь? Хотя с другой стороны авторизацией пользуется только 3 человека как правело раз в неделю и вероятность того что именно в это время будет работать подборщик маловероятно. P.S. С задержкой уже немного разобрался, но не понимаю почему такая реализация:
Почему скрипт засыпает на 20 секунд прежде чем вывести print. Print ведь стоит первым. Так же все еще интересно услышать ваши мысли в целом об этом всем. Это сообщение отредактировал(а) Dima85 - 6.9.2009, 23:53 |
|||
|
||||
TDrive |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.9.2009 Репутация: нет Всего: нет |
если у вас авторизация только для своих нескольких людей то можно кроме пароля хранить IP адреса этих людей и проверять при авторизации по IP адресам чужие или свои. если адреса динамические можно хранить адрес подсети например 189.189.*.* короче по ситуации смотря с каких IP брутфорсят. а так самое надёжное и без файлов это грамотная капча. |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
||||
|
||||
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
TDrive, адреса постоянно меняються, сети так же.
shamber, расскажите пожалуйста подробней. |
|||
|
||||
TDrive |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.9.2009 Репутация: нет Всего: нет |
функция print() в перле использует для вывода библиотеку iostream из С/С++ а там вывод сообщения происходит не сразу, а сначала собирается в буфер и выводится когда буфер полный или когда программа закончила работу как в вашем примере. есть для вывода ещё функция syswrite() которая не использует буфер а выводит сразу например:
будет выведено сообщение а потом программа ждёт 20 сек а если написать например
то сначала будет напечатано "<h2>Ошибка</h2><p>Попытка авторизации не удалась.</p>" а через 20 сек "bla bla bla" короче print() не выводит сообщение а записывает сообщение в буфер ввода/вывода а потом система читает из этого буфера. есть ещё буферы в ОС, аппаратные буферы. |
||||
|
|||||
TDrive |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.9.2009 Репутация: нет Всего: нет |
да есть ещё переменная $|
если $|=1 то буферизация выключается если $|=0 то буферизация включена |
|||
|
||||
Dima85 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Пробовал
Не работает. Возможно я что-то упустил? Скрипт ничего не выводит, ждет 20 секунд и вобщем-то все. Ошибок тоже нет. Так же пробовал
В этом случае сначала срабатывает sleep потом print. |
||||
|
|||||
TDrive |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.9.2009 Репутация: нет Всего: нет |
||||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
Товарищи, вы какую-то странную идею обсуждаете - sleep(20) - усыпит процесс веб-сервера на 20 сек.
Это же готовая DOS атака. Даже напрягаться не придется - просто постоянные попытки авторизации в 30 потоков и сервера нет. имхо это не вариант. |
|||
|
||||
TDrive |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 6.9.2009 Репутация: нет Всего: нет |
ИМХО самое простое пароли минимум 12 символов использовать из букв,цифр,спец знаков и пускай брутфорсят несколько лет.
|
|||
|
||||
Dima85 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
sir_nuf_nuf, спасибо! Значит в топку эту идею.
TDrive, ну просто иногда не приятно, посматриваешь логи а там по 200-800 попуток подбора пароля с одного, двух IP и это за неделю. Это сообщение отредактировал(а) Dima85 - 8.9.2009, 11:50 |
|||
|
||||
Dima85 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 19.7.2007 Репутация: нет Всего: нет |
Возможно у вас есть какие-то наброски того же но без use DB_File, мой сервер к сожаленью не поддерживает это. Был бы вам очень благодарен. |
||||
|
|||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 2 Всего: 31 |
Это как так ?
DB_File - идет в комплекте вместе с perl - должен быть. Если только в Windows может не работать.. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |