Ответ 1
Взгляните на django-axes или django-brutebuster
Я ищу наиболее элегантный способ блокировки учетной записи пользователя Django после нескольких неудачных попыток входа в систему.
"Что я пробовал?" :
Я смотрел безуспешно для подобных вопросов на SO (Если этот вопрос дублирован, напишите комментарий, чтобы удалить этот).
На данный момент я ищу опыт других разработчиков. Я бы предпочел не говорить о том, что я пробовал, чтобы не отвечать на эти вопросы.
В качестве дополнительной информации приложение не поддерживает UserProfile (но, конечно, я могу включить его, если он того стоит).
Взгляните на django-axes или django-brutebuster
Мы использовали django-lockout, и он работал очень хорошо
ОБНОВЛЕНИЕ: последний выпуск django-lockout был 2011: https://pypi.org/project/django-lockout/. Проект Github больше не существует (404).
Одним простым решением было бы создать переменную в профиле пользователя, которая будет инициализирована 0 и увеличена на 1 каждый раз, когда пользователь безуспешно пытается войти в систему. Если эта переменная достигает определенного порога (который проверяется каждый раз, когда пользователь пытается войти в систему), учетная запись пользователя может быть приостановлена. Конечно, когда пользователь делает успешную регистрацию, переменная должна быть установлена на 0.
Создайте модель под названием "failed_logins" с двумя полями, поле "Пользователь" /внешний ключ и поле "Временная метка".
Когда пользователь успешно войдет в систему, удалите все записи "failed_logins" для этого пользователя.
Когда пользователь безуспешно входит в систему, создайте запись в "failed_logins" для этого пользователя с текущей меткой времени.
При каждой попытке входа для данного пользователя перед проверкой правильности/неправильности пароля:
запустите запрос, удалив все записи "failed_logins" старше 15 минут (или с периодом времени/времени).
запустите запрос, проверяющий количество записей в файлах fail_logins для пользователя, пытающегося войти в систему. Если он 5, убейте попытку входа в систему, уведомив пользователя, что они заблокированы из своей учетной записи, и попробуйте вернуться через некоторое время.
Результат: Пользователи заблокированы после 5 неудачных попыток входа в систему на короткое время.
Вы можете попробовать этот фрагмент:
<?php
session_start();
$conn = mysql_connect("localhost","root","root");
$select = mysql_select_db("Gayathri",$conn) or die("connection error");
if(isset($_COOKIE['login'])&&$_COOKIE['login']>=3){
echo " you have to wait for sometimes to enable your login"."<br>";
}
if(isset($_POST["username"],$_POST["userpassword"])){
$username = $_POST['username'];
$userpassword = $_POST['userpassword'];
$query = "SELECT * from userlogin where username='".$username."' and userpassword='".$userpassword."'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if($row){
echo"login successfull";
}
else{
echo"Invalid password"."<br>";
if(isset($_COOKIE['login'])){
$attempts=$_COOKIE['login']+1;
}else{
$attempts=1;
}
setcookie('login', $attempts, time()+60*60);
}
}
?>
<form method = "post" action = "">
<table border=1>
<tr>
<td>Username:</td>
<td><input type="text" name="username" value=""></td>
</tr>
<tr>
<td>Userpassword:</td>
<td><input type="password" name="userpassword" value=""></td>
</tr>
<tr>
<td colspan="2" align=center><input type="submit" name="submit" value="login"></td>
</tr>
</table>