погуглил, но так и не нашел единного мнения как лучше реализовывать проверку второй и более авторизаци, записывать юзера в сессию, хранить в куки, или создать еще один столбец в базе??
посоветуйте какой способ более надежен. ссылки на инфу приветствуются)
спасибо:)
Спустя 1 час, 28 минут, 23 секунды (12.07.2010 - 17:51) Rand написал(а):
Надежнее через базу. Делать проверку либо для каждого пользователя, либо для конкретного ip. В первом случае: в таблице users создаем поле captcha, в котором будем хранить 1 или 0 (показывать капчу или нет). Во втором: создаем новую таблицу, в которой будет хранится список ip; если ip есть в таблице, показываем ему капчу. После успешной авторизации удаляем ip.
Спустя 4 минуты, 23 секунды (12.07.2010 - 17:55) FatCat написал(а):
Не люблю каптчу.
Проще писать в базу - прямо в таблицу пользователей - число попыток авторизаций; обнулять при успешной авторизации, а на саму авторизацию делать задержку например по формуле 10*$count_bruts/(time()-$last_visit).
Таким образом нормальным пользователям будет задержка почти незаметной, а при брутфорсе время задержки будет стремиться к 10 секундам.
Проще писать в базу - прямо в таблицу пользователей - число попыток авторизаций; обнулять при успешной авторизации, а на саму авторизацию делать задержку например по формуле 10*$count_bruts/(time()-$last_visit).
Таким образом нормальным пользователям будет задержка почти незаметной, а при брутфорсе время задержки будет стремиться к 10 секундам.
Спустя 14 часов, 58 минут, 33 секунды (13.07.2010 - 08:54) tazododu написал(а):
FatCat, то есть вы предлагаете ставить в скрипте sleep()
добавить 2 столбца, и один из них сразу по умолчанию заполнить last_visit = time()?
проверил так:
добавить 2 столбца, и один из них сразу по умолчанию заполнить last_visit = time()?
проверил так:
$last_visit = 12790024007;
$time = time();
for($i=1; $i<1000; $i++) {
$delay = 10 * $i / (time() - $last_visit);
}
Спустя 2 часа, 5 минут, 29 секунд (13.07.2010 - 10:59) tazododu написал(а):
сделал так:
тоесть чем больше неправильных вводов тем дольше джешь.
что скажете о методе?
if($user['count_bruts'] <= 5)
$delay = 0;
elseif($user['count_bruts'] > 5 && $user['count_bruts'] <= 20)
$delay = 1;
elseif($user['count_bruts'] > 20 && $user['count_bruts'] < 100)
$delay = 20;
elseif($user['count_bruts'] >= 100)
$delay = 600;
sleep($delay);
тоесть чем больше неправильных вводов тем дольше джешь.
что скажете о методе?
Спустя 1 час, 7 минут, 12 секунд (13.07.2010 - 12:06) Nikitian написал(а):
$delay=($user['count_bruts']>5?(($user['count_bruts']-5)*20):0);
Примерно так и не париться вообще
Спустя 3 минуты, 27 секунд (13.07.2010 - 12:10) twin написал(а):
Ни один человек в здравом уме и рассудке не станет брутить форму входа, если там есть задержка хотя бы не 2 секунды. Простой юзер этого даже и не заметит, а вот для бота такая ноша неподсильна.
Другой вопрос, что нужно не дать ему делать несколько параллельных запросов. А для этого его нужно идентифицировать. Что бывает достаточно сложно.
Так что пока единственным более менее надежным способом такой защиты является капча. Ну или другие фокусы с формой, которые используются на этом форуме допустим.
Другой вопрос, что нужно не дать ему делать несколько параллельных запросов. А для этого его нужно идентифицировать. Что бывает достаточно сложно.
Так что пока единственным более менее надежным способом такой защиты является капча. Ну или другие фокусы с формой, которые используются на этом форуме допустим.