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 :: Защита авторизации без капчи

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Хочется сделать защиту для авторизации без использования captcha
utilizatrg
Отправлено: 24 Февраля, 2015 - 17:44:15
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Всем привет, недавно у меня появилась идея но вот как её реализовать я пока не придумал.

Описание:

Есть форма: логин, пароль, кнопка. Хочу сделать так что-бы при неправильном вводе логина или пароля, сохранялся некий параметр числа попыток входа. Допустим максимальное число попыток 5 раз. Если была допущена ошибка при авторизации 5 раз. То человек не может авторизироваться в течении 15 минут. Как только 15 минут прошли, количество обнуляется и у человека появляется опять 5 попыток. И так всегда.

Помогите пожалуйста советом, как такое можно реализовать. Буду благодарен за любую помощь =)
 
 Top
Anguis
Отправлено: 24 Февраля, 2015 - 17:49:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




Через сессии. Сохраняете время первой попытки в сессионную переменную, и заводите счетчик попыток, который инкрементируется при каждой новой неудачной попытке.
 
 Top
likvidator
Отправлено: 24 Февраля, 2015 - 17:49:36
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


Помог: 4 раз(а)

[+]


utilizatrg пишет:
Помогите пожалуйста советом, как такое можно реализовать. Буду благодарен за любую помощь =)

храни в бд время последней попытки и общее их количество(у каждого логина будут свои поля,соответственно),а дальше уже чекай и сверяй...
(Добавление)
Anguis пишет:
Через сессии. Сохраняете время первой попытки в сессионную переменную, и заводите счетчик попыток, который инкрементируется при каждой новой неудачной попытке.

удалю куку и начну брутить по новой
(Добавление)
а еще лучше - вообще не приму
 
 Top
Anguis
Отправлено: 24 Февраля, 2015 - 17:52:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




likvidator, согласен. Но это можно тоже отследить и если куки не ставятся - вообще запретить попытки авторизации.
А при использовании базы есть риск чрезмерного роста объема таблицы.
 
 Top
utilizatrg
Отправлено: 24 Февраля, 2015 - 17:57:58
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Благодарю за помощь! Ребят, а есть какие либо примеры по данному вопросу? Я просто с временем никогда не работал ещё Закатив глазки
 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 18:14:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 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, разрешаем авторизацию

(Отредактировано автором: 24 Февраля, 2015 - 18:15:14)

 
 Top
Anguis
Отправлено: 24 Февраля, 2015 - 18:24:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




Ts.Saltan, а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?
 
 Top
utilizatrg
Отправлено: 24 Февраля, 2015 - 18:26:39
Post Id



Новичок


Покинул форум
Сообщений всего: 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 запросов в сек посылать на сайт. Что случится с базой?


эх( Так что мне делать? Подскажите))) Радость
 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 18:28:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




Anguis пишет:
Ts.Saltan, а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?

Эмм, с базой, наверное, ничего
Ну забьются у пользователей значения attempts до 5, ну через 15 минут обнулятся. Всё Закатив глазки
(Добавление)
utilizatrg пишет:
эх( Так что мне делать? Подскажите)))

Не бойтесь, строить защиту такого рода на куках/сессиях мало того небезопасно, но и нелогично
Сначала сделайте это, а потом можно и к ip блокировки привязать
 
 Top
utilizatrg
Отправлено: 24 Февраля, 2015 - 18:31:53
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Ts.Saltan пишет:
Не бойтесь, строить защиту такого рода на куках/сессиях мало того небезопасно, но и нелогично
Сначала сделайте это, а потом можно и к ip блокировки привязать


Благодарю =)
 
 Top
likvidator
Отправлено: 24 Февраля, 2015 - 20:55:45
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


Помог: 4 раз(а)

[+]


utilizatrg пишет:
а я возьму скрипт, который будет генерить случайные пары логин пасс и по 100 запросов в сек посылать на сайт. Что случится с базой?

учитывая,что это уже тупо ддос... Что мне мешает заходить на сайт с заного очищенной кукой? и заставлять пых генерить новый сессионый файл? и делать эти же 100 запросов в сек?
(Добавление)
причем 100 сессионных файлов и 100 записей в бд - штуки настолько разные(в плане нагрузки),что даже обсуждать,что есть лучше,а что хуже - глупо
 
 Top
OrmaJever Модератор
Отправлено: 24 Февраля, 2015 - 22:37:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Если ещё актуально то опишу своё мнение
Никаких сессий и кук, это работать не будет. Только бд либо файлы, но лучше бд. Защиту лучше делать не по логину, а по ip т.к. можно делать простым перебором по словарю разных пар логин:пароль
Таблица простая
id ip lastTime
по полям я думаю всё ясно?
При попытке входа выбираем 5 последних записей за последние 15 минут с данного ip
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(id) count WHERE ip = ? AND lastTime > now() - 15 * 60 LIMIT 5

если запрос вернёт count = 5 то значит писать что попытки исчерпаны, если же меньше то добавлять в бд новую попытку.
Таблица большой не будет это 100%, но для пущей уверенности можно каждые сутки кроном запускать скрипт который будет удалять все записи старше 30 минут.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB