Я не согласен.Я чувствую, что блокировка имени пользователя в целом безопаснее (без учета IP).
Что происходит, когда злонамеренный хакер подделывает IP-адрес?Хакер может перебирать IP-адреса и постоянно перебирать имя пользователя.
Я блокируюсь после трех попыток на 15 минут.
Комментарии к вашей правке:
Я бы сделал что-то вроде этого:
if(resolveTimeOuts()){
bool uid = UserExists();
//do other stuff
}else{
"Your IP has been locked. Enter this code to prove you are human."
// Captcha or math equation.
}
Хотя, Я не буду удалять просроченные IP-запросы в resolveTimeOuts()
.Это может увеличить время выполнения функции.Сделайте что-то вроде этого:
if(resolveTimeOut()){
bool uid = UserExists();
//do other stuff
}else{
"Your IP has been locked. Enter this code to prove you are human."
if(rand(1,5) == 5){
// or something equivalent
deleteExpiredRequests();
}
// Captcha or math equation.
}
Это даст ускоренное выполнение resolveTimeOut()
, и если IP запрашивает слишком быстро, все истекшие тайм-ауты будут удалены.Вид двойного удара для хакера DoS.Они получают другую страницу, и генерация страницы может быть замедлена до deleteExpiredRequests()
, если истек срок действия.
Редактировать два: Это более или менее то, что я бы реализовал.Я бы написал полный код, но я программирую на PHP.
bool function humanRequest(){
// decide if the request lag is humanistic or bot speed
// for example: last_request > this_request - 500;
}
if(!humanRequest()){
// redirect to a Captcha page or die with a warning or something (like SO does)
}
uid = getUsername(username);
if(uid > 0){
// validated request
}
else{
// increase attempts
// you could have a separate column for IP requests or whatever
// lock out username after 3 attempts
}
Вы могли бы поставить humanRequest()
в обоих случаях проверки имени пользователя.По сути, если они запрашивают какое-либо имя пользователя в течение короткого периода времени, внесите их в черный список.Но если вы проверяете имена пользователей на специальной странице (которая включается только тогда, когда кто-то пытается войти), это уже позаботится об этом.
Таким образом, вам нужно только добавить другую таблицу.Нет необходимости изменять вашу таблицу.