Блокировка пользователей после слишком многих неудачных попыток входа - PullRequest
13 голосов
/ 27 января 2012

Я ищу самый элегантный способ блокировки учетной записи пользователя Django после нескольких неудачных попыток входа в систему .

«Что я пробовал?» :

Я безуспешно искал похожие вопросы для SO (Если этот вопрос дублирует, пожалуйста, оставьте комментарий, чтобы удалить этот).

В данный момент я ищу опыт других разработчиков. Я бы предпочел не говорить о том, что я пробовал, чтобы не обуславливать ответы.

В качестве дополнительной информации в приложении не включен UserProfile (но, конечно, я могу включить его, если оно того стоит).

Ответы [ 5 ]

15 голосов
/ 27 января 2012
7 голосов
/ 27 января 2012

Мы использовали django-lockout , и он работал очень хорошо

4 голосов
/ 28 января 2012

Одним из простых решений было бы создание в профиле пользователя переменной с начальным значением 0, которое увеличивается на 1 каждый раз, когда пользователь безуспешно пытается войти в систему. Если эта переменная достигает определенного порога (который проверяется каждый раз, когда пользователь пытается войти), учетная запись пользователя может быть приостановлена. Конечно, когда пользователь успешно входит в систему, переменная должна быть установлена ​​обратно в 0.

1 голос
/ 03 апреля 2012

Создать модель с именем «failed_logins» с двумя полями, полем «Пользователь» / внешним ключом и полем «Метка времени».

После успешного входа пользователя удалите все записи «failed_logins» для этого пользователя.

Когда пользователь безуспешно входит в систему, создайте запись в "failed_logins" для этого пользователя с текущей отметкой времени.

При каждой попытке входа в систему для данного пользователя ПЕРЕД проверкой, чтобы убедиться, что пароль правильный / неправильный:

  • выполнить запрос, удалив все записи «failed_logins» старше 15 минут (или с периодом времени).

  • запустить запрос, проверяющий количество записей в failed_logins для пользователя, пытающегося войти в систему. Если это 5, прекратите попытку входа в систему, уведомив пользователя о том, что он был заблокирован из своей учетной записи, и попробуйте через некоторое время.

Результат: Пользователи блокируются после 5 неудачных попыток входа в систему на короткое время.

0 голосов
/ 20 апреля 2017

Вы можете попробовать этот фрагмент:

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...