Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ograniczenie liczby nieudanych prób logowania

Nie chcesz używać bazy danych do sprawdzania „liczby nieudanych logowań”? Następnie po prostu użyj pliku cookie i sprawdź to. Jasne, mogą go usunąć, ale to kłopot.

Jednak , podejrzewam, że już otrzymujesz nazwę użytkownika i hasło z bazy danych, dlaczego nie pobrać również ostatniej liczby nieudanych logowań, kiedy już przy tym jesteś?

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

Coś w tym stylu.

EDYTUJ:

To naprawdę stary kod i teraz widzę z nim pewne problemy. Ale przynajmniej zawsze powinieneś używać PDO (przygotowanych instrukcji) do wstawiania danych do bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyodrębnianie podciągów MySQL za pomocą separatora

  2. Tworzenie systemu licencji

  3. Przechowuj wiele adresów e-mail w bazie danych dla różnych typów użytkowników

  4. Konwersja zbioru wyników MySQL z wierszy na kolumny

  5. Neo4j - Utwórz związek za pomocą Cypher