За последние 24 часа нас посетили 59414 программистов и 1740 роботов. Сейчас ищут 786 программистов ...

Организация защиты от подбора паролей

Тема в разделе "PHP для новичков", создана пользователем ___Kirill___, 8 мар 2009.

  1. ___Kirill___

    ___Kirill___ Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    53
    Симпатии:
    0
    Сейчас занимаюсь модулем пользователей в своей cms, конкретно дорабатываю авторизацию. Хотел спросить, как делается защита, когда к примеру после 3 неправильных попыток авторизоватся появляется капча для защиты от перебора. А конкретно как дать понять php что именно этому юзеру нужно капчу еще показать. Через сессии думаю не эффективно, так как можно закрыть браузер и открыть его снова и вводить логин/пасс без капчи, сессия же обнулится. Через БД вроде тоже не эффективно, если по IP там инфу хранить, это ж через прокси обходится. Подскажите схему как реализовать этот механизм?
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Просто сразу заставлять вводить капчту (если ты про защиту от автоматического перебора)
    У меня реализовано, что после N неправильных попыток возможность авторизации для этого пользователя блокируется на 15 минут (900 секунд). Если IP продолжает долбиться, он уходит в банлист на 24 часа
     
  3. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Как Вариант:

    Делаем таблицу в которой храним кол-во попыток залогиниться.
    При 3+ неверных заходах делаем задержку перед следующей попыткой в, скажем, 20 секунд.
     
  4. ___Kirill___

    ___Kirill___ Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    53
    Симпатии:
    0
    Нет, никаких задержек, только капча при 3+ неправильных попытках. Должно быть так же как это устроено на ucoz.ru

    Решил сделать такую таблицу:
    IP | Количество попыток | Время добавления в таблицу

    При первом неправильной логине заносится первая запись в таблицу. Когда количество попыток у IP достигает 3, помимо логина/пароля модуль авторизации начинает требовать ввод капчи. И таблицу эту очищать раз в день.

    Как вам такая схема? Или есть более оптимальный вариант?
     
  5. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Быть может стоит еще удалять запись если с данного IP пользователь успешно залогинился?
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    По IP + по логину (например если идет подбор пароля для конкретного юзера через ботнет) + неплохо бы вообще смотреть плотность ошибок и если она превышает некое значение в единицу времени - показывать капчу всем.
    С этой точки зрения лучше делать просто инсерт на каждую ошибку и считать селектами. Чистить переодически по времени. По IP|логину на успешном логине... можно, но не обязательно.
     
  7. ___Kirill___

    ___Kirill___ Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    53
    Симпатии:
    0
    Думаю по IP + логину не совсем хорошая идея, потому что можно перебирать один пароль и генерировать логины, так же как это делается в ICQ. Хотя на сайте обычно взламывают какого определенного юзера. Как думаете?
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Я имел ввиду - при N ошибок с одного IP для последующих попыток с этого IP _или_ N ошибок для одного логина для последующих попыток с этим же логином (вне зависимости от IP)
     
  9. Sindicat

    Sindicat Активный пользователь

    С нами с:
    10 фев 2009
    Сообщения:
    46
    Симпатии:
    0
    все интиресно, додуматся можно и самому, где хоть один пример ?? люди тут - же раздел для новичков !
     
  10. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Sindicat, человек спрашивал именно о теории. Зачем же кодом швыряться? :)
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А если просто сделать
    PHP:
    1. slepp(1);
    ? ;-)
    Для юзера лишняя секунда на авторизации и не заметна, а вот брутфорс уже не пройдет.
     
  12. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Ну для не очень нагрузного сайта потянет наверн :)
     
  13. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    sleep =)
     
  14. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Этакая помощь брутфорсерам задосить ваш сайт? =)
    Можно, но капча лучше. Если сложно все это - считать и все такое - показывайте капчу всем =)
    Вот любителям кода решение на коленке без базы =)
    $file = stat('/tmp/pswd.lock');
    if ($file[9]-time() <= 2) showcapcha();
    ---
    if (wrong_password) touch('/tmp/pswd.lock');
     
  15. ___Kirill___

    ___Kirill___ Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    53
    Симпатии:
    0
    Да не, не сложно)) Код мне не нужен, всё могу прекрасно реализовать сам, PHP программист со стажом 2 года, просто я искал максимально-удобный и эффективный способ именно с точки зрения теории. Скорее всего остановлюсь на варианте MiksIr