Changes between Version 8 and Version 9 of ImportantCase0


Ignore:
Timestamp:
02/24/25 15:56:13 (6 weeks ago)
Author:
222039
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ImportantCase0

    v8 v9  
    111111session_regenerate_id(true);
    112112
    113 // Rate limiting check
     113// Rate limiting check (session-based)
    114114if (isset($_SESSION['login_attempts']) && $_SESSION['login_attempts'] > 5) {
    115115    $timeout = 300; // 5 minutes timeout
     
    131131
    132132try {
     133    $conn->beginTransaction();
     134
    133135    $username = trim(htmlspecialchars($_POST['username']));
    134136   
    135     $sql = "SELECT * FROM Users WHERE username = :username";
     137    // Using stored procedure instead of direct query
     138    $sql = "SELECT * FROM validate_login(:username)";
    136139    $stmt = $conn->prepare($sql);
    137140    $stmt->bindParam(':username', $username, PDO::PARAM_STR);
     
    141144        $_SESSION['login_attempts'] = isset($_SESSION['login_attempts']) ? $_SESSION['login_attempts'] + 1 : 1;
    142145        $_SESSION['last_attempt'] = time();
     146
     147        $conn->rollBack();
    143148        header("Location: /Sign&Log.php?error=INVALID_CREDENTIALS");
    144149        exit();
     
    150155        $_SESSION['login_attempts'] = isset($_SESSION['login_attempts']) ? $_SESSION['login_attempts'] + 1 : 1;
    151156        $_SESSION['last_attempt'] = time();
     157
     158        $conn->rollBack();
    152159        header("Location: /Sign&Log.php?error=INVALID_CREDENTIALS");
    153160        exit();
    154161    }
    155162
     163    $conn->commit();
     164
     165    // Session setup
    156166    $_SESSION['username'] = $username;
    157167    $_SESSION['userid'] = $res['userid'];
     
    170180   
    171181} catch (PDOException $e) {
     182    $conn->rollBack();
    172183    error_log("Login error: " . $e->getMessage());
    173184    header("Location: /Sign&Log.php?error=SERVER_ERROR");
    174185    exit();
    175186}
     187?>
    176188}}}
     189* '''''Се користи POST метод за испраќање на корисничкото име и лозинка. Кодот вклучува ограничување на обиди за логирање (rate limiting) за да се спречи brute force напад. Ако корисникот има повеќе од 5 неуспешни обиди, се блокира за 5 минути.'''''
     190* Валидација на влез: Проверува дали корисничкото име и лозинката се пополнети.
     191* Проверка на лозинката: Споредува ја внесената лозинка со хашираната лозинка во базата со password_verify.
     192* Сесија: Ако логирањето е успешно, се поставуваат сесиски променливи (корисничко име, ID, улога, активност, IP адреса).
     193* Пренасочување: Корисникот се пренасочува според неговата улога (Admin или обичен корисник).
     194* ''''' Ако има грешка (на пр., погрешни credentials или серверска грешка), корисникот се враќа на страницата за логирање со соодветна порака за грешка. '''''
    177195
    178196=== Чекор 3 ===