Мне дали код другого разработчика, который создал некоторые политики безопасности входа в систему. Например, если вы попытаетесь войти в систему с именем пользователя, которое существует в базе данных, начнется запись количества неудачных попыток входа. Затем, когда он достигнет 3 попыток входа, он добавляет еще одну запись в журналы, но добавляет к LockedOut бит 1.
Вы, ребята, верите, что это хорошая политика безопасности? Разве кто-то, пытающийся получить доступ, не попробует ввести большое количество случайных имен пользователей и принудительно заблокировать доступ всех к своей учетной записи? Это кажется плохой философией безопасности.
Я бы подумал, что лучшей процедурой безопасности было бы заблокировать любого, кто сделал 3 попытки в соответствии с таблицей IP-адресов, которая отслеживает различные попытки пользователей и срок действия которой истекает в течение 30 минут или около того, чтобы предотвратить DDoS.
Как вы, ребята, разрабатываете безопасность входа в систему ?? Вот что в основном сделал этот разработчик:
if username is in database:
if first login: increase fail-attempt counter.
if second login: lock out username.
else: don't let him in.
else:
incorrect password.
edit: Заключительная процедура:
public void ResolveTimeouts()
{
if (data.Expire <= DateTime.Now)
{ // it will only delete ONE single entry from the database,
// that happens to be this user's IP
// If and only if, The expiration date is older than right now.
Delete(this.data);
data.Attempts = 0;
}
}
int uid = UserExists(username);
if(uid < 1){
ResolveTimeOuts(); // this will delete IPs from table if expiration passed
if(loginAttempts >= 3){
"Fail login, you have been locked out for " + TIMEOUT + " minutes";
ExtendExpiration(TIMEOUT);
} else {
IncrementAttempts();
"fail login, incorrect username or password.";
}
} else {
if(authenticate(uid, password)){
"Successfully logged in.";
} else {
// INSERT lock out specific username feature here.
"failed login, incorrect username or password.";
}
}