Алгоритм реализации проверки от автоподбора при авторизации

/\exa

Новичок
Алгоритм реализации проверки от автоподбора при авторизации

Добрый день!
Хочу спросить совета. Возникла необходимость сделать провеку, которая-бы исключала автоподбор пароля. Почитал материалы на форуме. Решил реализовать вот таким способом, подскажите корректно это реализованно или нет.
PHP:
//определение переменной для подсчетов неправильного ввода пароля
if(isset($_SESSION["count_error"])!=true){
$_SESSION["count_error"]=0;
}
//проверка существования переменной которая определяет время блокирования авторизации
if(isset($_SESSION["time_error"])==true){
    if($_SESSION["time_error"]<time()){
     unset($_SESSION["time_error"]);
     $_SESSION["count_error"]=0;
    }else{
    print "блокировка: ".date("i:s",$_SESSION["time_error"]-time())."минут";
    }
}else{
if(eregi("^$root_dir",$_SERVER["HTTP_REFERER"])){//откуда пришел

if(isset($_POST["username"]) AND isset($_POST["password"])){

   $uname=htmlspecialchars($_POST["username"]);
//запрос к базе и проверка на существования юзеря и правильности пароля
   $sql="SELECT userid FROM users WHERE username='".$uname."' AND user_password='".md5($_POST["password"])."'";
   $result=mysql_query($sql) or die(mysql_error());
   $row=mysql_fetch_array($result);

   if(count($row["user_id"])>0){
   $_SESSION["status_user"]=1;
   $_SESSION["name"]=$uname;
   }else{
//начинает работать счетчик неправильных вводов логин-пароль
$_SESSION["count_error"]++;//счетчик неправильных вводов
           if($_SESSION["count_error"]>3){
                         $_SESSION["time_error"]=time()+120;
           }
   }
header("Location: index.php");
        }else{
header("Location: index.php");
              }
}else{
header("Location: index.php");
exit;
}

  }
Заранее благодарен.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Автоподбор редко когда производится вручную. А при работе скрипта подбора сессии создаваться не будут, ибо не будут передаваться ни куки, ни SID в урл. Т.е. - бессмысленно.
 

/\exa

Новичок
т.е все таки нужно привязываться к ip с которого идет обращение?
 

berkut

Новичок
зачем к айпи. нужно на каждый акк считать кол-во попыток авторизации, без привязок к айпи и прочему
 

zerkms

TDD infected
Команда форума
berkut
т.е. чтобы тебя вывести из строя - мне достаточно написать бота, который будет делать ложные срабатывания авторизации и ты не сможешь авторизоваться. так?
 

Фанат

oncle terrible
Команда форума
потерпит две минуты перед логином, не переломится.

а у тебя есть другие предложения?
 

zerkms

TDD infected
Команда форума
Фaнaт
раз уж такая паранойя - то сделать задержку в 1-2секунды в скрипте авторизации
 

Фанат

oncle terrible
Команда форума
во-первых, что ты называешь задержкой?
во-вторых, ты предлагаешь вообще при любой авторизации её делать?
а это действительно лучше предложенного выше? подумай хорошенько
 

/\exa

Новичок
ёще уточнение можно? т.е. я так понимаю, нужно создать табличку с полями, например id, name_error(аккаунт), count_error(счетчик),time_error(время блокировки). Если пароль введен неправильно, увеличивать count_error и по достижению критического значения в поле time_error записывать время текущее+ время блокировки?
 

zerkms

TDD infected
Команда форума
*****
угу, я думаю что пауза в 1 секунду лучше

-~{}~ 18.07.08 18:26:

хотя - ничто не мешает делать паузу с некоторой вероятностью
 

Фанат

oncle terrible
Команда форума
угу, я думаю что пауза в 1 секунду лучше
офигеть, как лучше - ложить сервер!

ничто не мешает делать паузу с некоторой вероятностью
тебе не кажется, что паузу следует делать не с "некоторой" вероятностью, а со стопроцентной - ТОЛЬКО в случае попытки подбора?
 

zerkms

TDD infected
Команда форума
офигеть, как лучше - ложить сервер!
sleep() занимает процессорное время?

а со стопроцентной - ТОЛЬКО в случае попытки подбора?
отследить подборщика, как также было озвучено, со 100% уверенностью ты не сможешь. о каких ста процентах тогда идёт речь? а что защитит некоего пользователя Х, который станет мишенью от того, что будет запущен скрипт, который с некоторой периодичностью будет ложно срабатывать его авторизацию?
 

Фанат

oncle terrible
Команда форума
да ну ты какие-то глупости пишешь.
висящая в памяти куча процессов, жрущих память, БУДЕТ тормозить сервер.

отследить подбор МОЖНО. три неверных подбора за короткое время - можно ставить таймаут. Юзер не переломится. Сам виноват. Будет время поточнее пароль вспомнить. алгоритмы, блин, очевидные.

Это при твоем подходе все криво.
у тебя какая-то однозначность в голове - задержку всем без разбору, или если отследили попытку, то сразу банить!

при том что существуют простые средства, необременительные для юзера. что тут непонятного-то?

-~{}~ 18.07.08 11:48:

что защитит некоего пользователя Х
ОТ ЧЕГО защитит? Юзер введет свой пароль и войдет, как обычно, ничего не заметив.
Мы не от доса защищаемся, а от подбора пароля. От неправильно введенного пароля. правильно введенный вообще никаким санкциям не подвергается. Разве что - подождать минутку, чтобы его ввести.
 

Baranov_Dron

Новичок
Фaнaт
zerkms говорит про бота
berkut
т.е. чтобы тебя вывести из строя - мне достаточно написать бота, который будет делать ложные срабатывания авторизации и ты не сможешь авторизоваться. так?
Тоесть если делать что если пользователь ввёл 5 раз неправильно пароль, то ему будет выставлен таймаут. А что будет если я возьму напишу бота, который будет пытаться зайти за этого пользователя с неправильным паролем? Бот 5 раз залогинился с неправильным паролем аккуанта врага, дальше сайт устанавливает таймаут. В это время заходит враг, вводит правильный пароль, но стоит таймаут, он не заходит, ему пишут подожди. А скрипт бац, снова 5 раз неправильно ввёл пароль при авторитизации. И враг опять не может зайти...
Как защитить пользователя от такого?
 
Сверху