From 5c084c6aaa2b41fc3d40d550b5b5f3a5f9d7f3fb Mon Sep 17 00:00:00 2001 From: Jester Date: Mon, 19 Jan 2026 08:57:58 +0300 Subject: [PATCH] security update --- api/check_auth.php | 3 +- api/login.php | 70 ++++++++++++++++------------- api/logout.php | 15 ++++++- config/db.php | 4 +- config/session.php | 15 +++++++ index.html | 9 ++-- js/auth.js | 8 ++-- login.html | 107 ++++++++++++++++++++++++++++++++++++++++++--- 8 files changed, 182 insertions(+), 49 deletions(-) create mode 100644 config/session.php diff --git a/api/check_auth.php b/api/check_auth.php index 0e52a9b..e2bed0e 100644 --- a/api/check_auth.php +++ b/api/check_auth.php @@ -1,5 +1,6 @@ prepare("SELECT * FROM users WHERE username = ?"); - $stmt->execute([$login]); - $user = $stmt->fetch(PDO::FETCH_ASSOC); - - if ($user && password_verify($password, $user['password_hash'])) { - // Успешная авторизация - session_start(); - $_SESSION['user_id'] = $user['id']; - $_SESSION['username'] = $user['username']; - - echo json_encode([ - 'success' => true, - 'message' => 'Вход выполнен успешно', - 'user' => [ - 'id' => $user['id'], - 'username' => $user['username'], - ] - ]); - } else { - echo json_encode(['success' => false, 'message' => 'Неверные учетные данные']); - } +if ($_SERVER['REQUEST_METHOD'] !== 'POST') { + http_response_code(405); + echo json_encode(['success' => false, 'message' => 'Метод не поддерживается']); + exit; +} + +$data = json_decode(file_get_contents('php://input'), true); +if (!is_array($data)) { + http_response_code(400); + echo json_encode(['success' => false, 'message' => 'Некорректные данные']); + exit; +} + +$login = trim($data['username'] ?? ''); +$password = $data['password'] ?? ''; + +// Поиск пользователя по username +$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?"); +$stmt->execute([$login]); +$user = $stmt->fetch(PDO::FETCH_ASSOC); + +if ($user && password_verify($password, $user['password_hash'])) { + // Успешная авторизация + session_regenerate_id(true); + $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + + echo json_encode([ + 'success' => true, + 'message' => 'Вход выполнен успешно', + 'user' => [ + 'id' => $user['id'], + 'username' => $user['username'], + ] + ]); +} else { + echo json_encode(['success' => false, 'message' => 'Неверные учетные данные']); } ?> diff --git a/api/logout.php b/api/logout.php index 829c135..979ccb2 100644 --- a/api/logout.php +++ b/api/logout.php @@ -1,5 +1,18 @@ false, 'message' => 'Метод не поддерживается']); + exit; +} + +$_SESSION = []; +if (ini_get('session.use_cookies')) { + $params = session_get_cookie_params(); + setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']); +} session_destroy(); echo json_encode(['success' => true]); ?> \ No newline at end of file diff --git a/config/db.php b/config/db.php index 2b71884..8675c63 100644 --- a/config/db.php +++ b/config/db.php @@ -1,7 +1,7 @@ 0, + 'path' => '/', + 'domain' => '', + 'secure' => $isSecure, + 'httponly' => true, + 'samesite' => 'Lax', + ]); + session_start(); +} +?> diff --git a/index.html b/index.html index aaef4f8..e9f0633 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ \ No newline at end of file