Mysql
 sql >> база данни >  >> RDS >> Mysql

Ограничаване на броя на неуспешните опити за влизане

Не искате да използвате базата данни за проверка на „броя неуспешни влизания“? След това просто използвайте бисквитка и я проверете. Разбира се, те могат да го премахнат, но това е караница.

Въпреки това , подозирам, че вече получавате потребителското име и паролата от базата данни, защо не извлечете и последния брой неуспешни влизания, докато сте там?

if (isset($_POST['submit_login'])) {

    if (isset($_POST['username']) && isset($_POST['password'])) {
        $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string($_POST['password']);
        // id = unique primary key
        $rs = mysql_query('SELECT id,Username,Password,Failed_logins,IP_address FROM Users WHERE Username = '.$username.'');
        $num = mysql_num_rows($rs);
        if ($num > 0) {
            // I would add a password hash here to $password, and check against the hashed Password from the database
            // But let's check the clean passwords
            $row = mysql_fetch_array($rs);
            if ($password == $row['Password']) {
                // Successful login, set session or whatever you need
                // Reset failed logins
                mysql_query('UPDATE Users SET Failed_logins = 0 WHERE id = '.$row['id'].'');
                header('location: success.php');
            } else {
                // Failed password check
                if ($row['Failed_logins'] > 3) {
                    // Redirect to captcha
                    header('location: captcha.php');
                } else {
                    $ip = $_SERVER['REMOTE_ADDR'];
                    if ($row['IP_address'] != $ip) {
                        // New ip adress, reset failed logins
                        $failed_logins = 0;
                    } else {
                        // Increment failed logins
                        $failed_logins = $row['Failed_logins']+1;
                    }
                    mysql_query('UPDATE Users SET Failed_logins = '.$failed_logins.',IP_address = '.$ip.' WHERE id = '.$row['id'].' ');
                } // End check Failed_logins > 3
            }
        } else {
            // No such Username found in database
            $error = 'no_such_username';
        } // End username check from database

    } else {
        // Either username or password is missing
        $error = 'incomplete_form';
    } // end check for username and password

} // end main submit_login check

Нещо такова.

РЕДАКТИРАНЕ:

Това е наистина стар код и сега виждам някои проблеми с него. Но поне винаги трябва да използвате PDO (подготвени отчети) за вмъкване на данни във вашата база данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е LENGTH() в MySQL?

  2. SQL LIKE % вътре в масива

  3. Грешка при кодиране при записване на данни от excelfile в база данни (mysql)

  4. Как да преброите общия брой редове в изхода на ACF повторител

  5. Контролна сума на резултатите от SELECT в MySQL