Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Membatasi jumlah upaya login yang gagal

Anda tidak ingin menggunakan database untuk memeriksa 'jumlah login gagal'? Kemudian cukup gunakan cookie dan periksa. Tentu, mereka dapat menghapusnya, tetapi itu merepotkan.

Namun , Saya menduga Anda sudah mendapatkan nama pengguna dan kata sandi dari database, mengapa tidak juga mengambil jumlah terakhir login yang gagal saat Anda melakukannya?

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

Sesuatu seperti itu.

EDIT:

Ini benar-benar kode lama dan saya melihat beberapa masalah dengannya sekarang. Tapi, setidaknya Anda harus selalu menggunakan PDO (prepared statement) untuk memasukkan data ke database Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kebocoran memori dalam skrip php

  2. Gambaran Umum Operator Kubernetes Cluster Percona XtraDB

  3. Cari di alamat IP parsial yang disimpan sebagai bilangan bulat

  4. hapus baris kosong yang dicetak dari output kueri Hive menggunakan python

  5. Laravel &beberapa kueri penghitungan menggunakan Eloquent