Changes between Version 8 and Version 9 of ImportantCase0
- Timestamp:
- 02/24/25 15:56:13 (6 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ImportantCase0
v8 v9 111 111 session_regenerate_id(true); 112 112 113 // Rate limiting check 113 // Rate limiting check (session-based) 114 114 if (isset($_SESSION['login_attempts']) && $_SESSION['login_attempts'] > 5) { 115 115 $timeout = 300; // 5 minutes timeout … … 131 131 132 132 try { 133 $conn->beginTransaction(); 134 133 135 $username = trim(htmlspecialchars($_POST['username'])); 134 136 135 $sql = "SELECT * FROM Users WHERE username = :username"; 137 // Using stored procedure instead of direct query 138 $sql = "SELECT * FROM validate_login(:username)"; 136 139 $stmt = $conn->prepare($sql); 137 140 $stmt->bindParam(':username', $username, PDO::PARAM_STR); … … 141 144 $_SESSION['login_attempts'] = isset($_SESSION['login_attempts']) ? $_SESSION['login_attempts'] + 1 : 1; 142 145 $_SESSION['last_attempt'] = time(); 146 147 $conn->rollBack(); 143 148 header("Location: /Sign&Log.php?error=INVALID_CREDENTIALS"); 144 149 exit(); … … 150 155 $_SESSION['login_attempts'] = isset($_SESSION['login_attempts']) ? $_SESSION['login_attempts'] + 1 : 1; 151 156 $_SESSION['last_attempt'] = time(); 157 158 $conn->rollBack(); 152 159 header("Location: /Sign&Log.php?error=INVALID_CREDENTIALS"); 153 160 exit(); 154 161 } 155 162 163 $conn->commit(); 164 165 // Session setup 156 166 $_SESSION['username'] = $username; 157 167 $_SESSION['userid'] = $res['userid']; … … 170 180 171 181 } catch (PDOException $e) { 182 $conn->rollBack(); 172 183 error_log("Login error: " . $e->getMessage()); 173 184 header("Location: /Sign&Log.php?error=SERVER_ERROR"); 174 185 exit(); 175 186 } 187 ?> 176 188 }}} 189 * '''''Се користи POST метод за испраќање на корисничкото име и лозинка. Кодот вклучува ограничување на обиди за логирање (rate limiting) за да се спречи brute force напад. Ако корисникот има повеќе од 5 неуспешни обиди, се блокира за 5 минути.''''' 190 * Валидација на влез: Проверува дали корисничкото име и лозинката се пополнети. 191 * Проверка на лозинката: Споредува ја внесената лозинка со хашираната лозинка во базата со password_verify. 192 * Сесија: Ако логирањето е успешно, се поставуваат сесиски променливи (корисничко име, ID, улога, активност, IP адреса). 193 * Пренасочување: Корисникот се пренасочува според неговата улога (Admin или обичен корисник). 194 * ''''' Ако има грешка (на пр., погрешни credentials или серверска грешка), корисникот се враќа на страницата за логирање со соодветна порака за грешка. ''''' 177 195 178 196 === Чекор 3 ===