Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Защита авторизации без капчи
Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Всем привет, недавно у меня появилась идея но вот как её реализовать я пока не придумал.
Описание:
Есть форма: логин, пароль, кнопка. Хочу сделать так что-бы при неправильном вводе логина или пароля, сохранялся некий параметр числа попыток входа. Допустим максимальное число попыток 5 раз. Если была допущена ошибка при авторизации 5 раз. То человек не может авторизироваться в течении 15 минут. Как только 15 минут прошли, количество обнуляется и у человека появляется опять 5 попыток. И так всегда.
Помогите пожалуйста советом, как такое можно реализовать. Буду благодарен за любую помощь =)
Anguis
Отправлено: 24 Февраля, 2015 - 17:49:30
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Через сессии. Сохраняете время первой попытки в сессионную переменную, и заводите счетчик попыток, который инкрементируется при каждой новой неудачной попытке.
likvidator
Отправлено: 24 Февраля, 2015 - 17:49:36
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012
Помог: 4 раз(а)
[+]
utilizatrg пишет:
Помогите пожалуйста советом, как такое можно реализовать. Буду благодарен за любую помощь =)
храни в бд время последней попытки и общее их количество(у каждого логина будут свои поля,соответственно),а дальше уже чекай и сверяй... (Добавление)
Anguis пишет:
Через сессии. Сохраняете время первой попытки в сессионную переменную, и заводите счетчик попыток, который инкрементируется при каждой новой неудачной попытке.
удалю куку и начну брутить по новой (Добавление)
а еще лучше - вообще не приму
Anguis
Отправлено: 24 Февраля, 2015 - 17:52:36
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
likvidator, согласен. Но это можно тоже отследить и если куки не ставятся - вообще запретить попытки авторизации.
А при использовании базы есть риск чрезмерного роста объема таблицы.
utilizatrg
Отправлено: 24 Февраля, 2015 - 17:57:58
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Благодарю за помощь! Ребят, а есть какие либо примеры по данному вопросу? Я просто с временем никогда не работал ещё
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 18:14:00
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013 Откуда: Belarus
Помог: 22 раз(а)
Anguis пишет:
чрезмерного роста объема таблицы
Что? Поле типа int вызовет чрезмерный рост? Бред
utilizatrg пишет:
Ребят, а есть какие либо примеры по данному вопросу?
В таблице mysql пусть будут поля
id | login | pass | attempts | lastLogin
При попытке авторизоваться берём значение attempts, если меньше 5, увеличиваем значение attempts+1, записываем lastLogin = time()
Если больше 5, берем lastLogin
Если time() - lastLogin < 15*60 //15 минут не прошло, отказываем в авторизации
Иначе - обнуляем attempts, разрешаем авторизацию
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Ts.Saltan, а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?
utilizatrg
Отправлено: 24 Февраля, 2015 - 18:26:39
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Ts.Saltan пишет:
В таблице mysql пусть будут поля
id | login | pass | attempts | lastLogin
При попытке авторизоваться берём значение attempts, если меньше 5, увеличиваем значение attempts+1, записываем lastLogin = time()
Если больше 5, берем lastLogin
Если time() - lastLogin < 15*60 //15 минут не прошло, отказываем в авторизации
Иначе - обнуляем attempts, разрешаем авторизацию
Спасибо! Пойду пробовать =) (Добавление)
Anguis пишет:
а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?
эх( Так что мне делать? Подскажите)))
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 18:28:39
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013 Откуда: Belarus
Помог: 22 раз(а)
Anguis пишет:
Ts.Saltan, а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?
Эмм, с базой, наверное, ничего
Ну забьются у пользователей значения attempts до 5, ну через 15 минут обнулятся. Всё (Добавление)
utilizatrg пишет:
эх( Так что мне делать? Подскажите)))
Не бойтесь, строить защиту такого рода на куках/сессиях мало того небезопасно, но и нелогично
Сначала сделайте это, а потом можно и к ip блокировки привязать
utilizatrg
Отправлено: 24 Февраля, 2015 - 18:31:53
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Ts.Saltan пишет:
Не бойтесь, строить защиту такого рода на куках/сессиях мало того небезопасно, но и нелогично
Сначала сделайте это, а потом можно и к ip блокировки привязать
Благодарю =)
likvidator
Отправлено: 24 Февраля, 2015 - 20:55:45
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012
Помог: 4 раз(а)
[+]
utilizatrg пишет:
а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?
учитывая,что это уже тупо ддос... Что мне мешает заходить на сайт с заного очищенной кукой? и заставлять пых генерить новый сессионый файл? и делать эти же 100 запросов в сек? (Добавление)
причем 100 сессионных файлов и 100 записей в бд - штуки настолько разные(в плане нагрузки),что даже обсуждать,что есть лучше,а что хуже - глупо
OrmaJever
Отправлено: 24 Февраля, 2015 - 22:37:55
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Если ещё актуально то опишу своё мнение
Никаких сессий и кук, это работать не будет. Только бд либо файлы, но лучше бд. Защиту лучше делать не по логину, а по ip т.к. можно делать простым перебором по словарю разных пар логин:пароль
Таблица простая
id ip lastTime
по полям я думаю всё ясно?
При попытке входа выбираем 5 последних записей за последние 15 минут с данного ip
SELECT count(id) count WHERE ip = ? AND lastTime > now()- 15 * 60 LIMIT5
если запрос вернёт count = 5 то значит писать что попытки исчерпаны, если же меньше то добавлять в бд новую попытку.
Таблица большой не будет это 100%, но для пущей уверенности можно каждые сутки кроном запускать скрипт который будет удалять все записи старше 30 минут.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.