Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giới hạn số lần đăng nhập không thành công

Bạn không muốn sử dụng cơ sở dữ liệu để kiểm tra 'số lần đăng nhập không thành công'? Sau đó, chỉ cần sử dụng một cookie và kiểm tra nó. Chắc chắn, họ có thể xóa nó, nhưng thật phức tạp.

Tuy nhiên , Tôi nghi ngờ rằng bạn đã lấy được tên người dùng và mật khẩu từ cơ sở dữ liệu, tại sao không tìm nạp số lần đăng nhập không thành công cuối cùng khi bạn đang ở đó?

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

Một cái gì đó tương tự.

CHỈNH SỬA:

Đây thực sự là mã cũ và tôi thấy một số vấn đề với nó bây giờ. Tuy nhiên, ít nhất bạn nên luôn sử dụng PDO (các câu lệnh chuẩn bị sẵn) để chèn dữ liệu vào cơ sở dữ liệu của mình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhanh nhất để kết xuất và tải cơ sở dữ liệu MySQL InnoDB bằng mysqldump là gì?

  2. Sử dụng Mysql trong dev / prod và H2 trong thử nghiệm

  3. Tải lên tệp CSV để xử lý cập nhật trạng thái và chèn bản ghi mới

  4. Thay đổi bảng nếu tồn tại hoặc tạo nếu không

  5. MySQL 'nếu tồn tại' lỗi