# Secure User Authentication and Session Management ### Overview This module, `user_handler.py`, is a standalone component for handling user authentication, session management, and security. It provides a secure, yet easy-to-use, system for managing user logins and protecting against common attacks like brute-force attempts and session fixation. It is designed to be a direct Python equivalent of a user management class you might find in a web application built with a traditional framework, offering similar functionality and a focus on security. ----- ### Core Security Features - **Password Hashing:** Passwords are not stored in plain text. The module uses `passlib` with `pbkdf2_sha256` for robust, salted password hashing, making it nearly impossible to retrieve the original password from the database. - **Session Fixation Prevention:** The `login` method regenerates the session ID after a successful authentication, ensuring that an attacker cannot hijack a pre-existing session. - **Brute-Force Protection:** The system tracks failed login attempts. After a configurable number of failures (e.g., 5 attempts), it automatically locks the user's account to prevent further brute-force attacks. - **Session Validation:** Sessions are not just validated by an ID. The module also checks the user's IP address and user agent to ensure the session hasn't been hijacked. - **Data Storage:** A simple `SQLite` database is used as a placeholder. In a production environment, this would be replaced by a more robust and scalable solution like `PostgreSQL`. ----- ### Module Components 1. **`Database` Class (Placeholder):** A simple wrapper for SQLite to simulate database interactions. This is where you would integrate a proper ORM or a more powerful database driver in a production application. 2. **`Security` Class:** A static class responsible for core security functions. It handles password hashing and verification using `passlib` and includes a method to simulate session ID regeneration. 3. **`UserHandler` Class:** The main class for handling user-related logic. It contains methods for: - `login(username, password, request_data)`: Verifies user credentials and establishes a secure session. - `logout()`: Terminates the user's session. - `is_logged_in()`: Checks if a user has an active session. - `is_admin()`: Determines if the logged-in user has administrator privileges. - `validate_session()`: Checks if the session is valid based on request details. - `lock_account()`: Manually locks a user's account. - `increment_failed_attempts()`: Increments the failed login counter and locks the account if a threshold is reached. ----- ### Example Usage The `if __name__ == "__main__":` block at the end of the file provides a complete example of how to use the module: 1. **Setup:** Initializes the database and creates the necessary tables. 2. **User Registration:** Demonstrates how to create a regular user and an admin user with securely hashed passwords. 3. **Successful Login:** Shows a successful login attempt, which creates a new session. 4. **Logout:** Illustrates how to terminate the session. 5. **Brute-Force Protection Test:** Simulates multiple failed login attempts to demonstrate the account-locking mechanism. 6. **Account Reset:** Shows how to manually reset failed attempts to re-enable an account. This module provides a robust and well-documented foundation for building a secure and reliable user authentication system.