How can PHP developers prevent malicious users from exploiting login restrictions based on IP addresses?

To prevent malicious users from exploiting login restrictions based on IP addresses, PHP developers can implement a rate-limiting mechanism that tracks the number of login attempts from a specific IP address within a certain time frame. If the number of attempts exceeds a certain threshold, further login attempts can be blocked for that IP address.

// Initialize variables
$ip = $_SERVER['REMOTE_ADDR'];
$attempts = 0;
$threshold = 5; // Maximum number of login attempts
$expiry_time = 60; // Time frame in seconds

// Check if IP address is in the database
$ip_query = "SELECT * FROM login_attempts WHERE ip_address = '$ip'";
$result = mysqli_query($conn, $ip_query);

if(mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    $attempts = $row['attempts'];
    $last_attempt = $row['last_attempt'];

    // Check if last attempt was within the time frame
    if(time() - strtotime($last_attempt) < $expiry_time) {
        $attempts++;

        // If attempts exceed threshold, block login
        if($attempts >= $threshold) {
            die("Login attempts exceeded. Please try again later.");
        }
    } else {
        // Reset attempts if time frame has passed
        $attempts = 1;
    }

    // Update database with new attempts count
    $update_query = "UPDATE login_attempts SET attempts = $attempts, last_attempt = NOW() WHERE ip_address = '$ip'";
    mysqli_query($conn, $update_query);
} else {
    // Insert new IP address with attempts count
    $insert_query = "INSERT INTO login_attempts (ip_address, attempts, last_attempt) VALUES ('$ip', 1, NOW())";
    mysqli_query($conn, $insert_query);
}