66 lines
2.3 KiB
PHP
66 lines
2.3 KiB
PHP
<?php
|
|
|
|
// Verification de l'utilisateur voir si ces ids sont bon ou pas
|
|
|
|
// On démarre une session au cas où le script soit exécuté directement par URL
|
|
require_once(__DIR__ . '/../functions/security.php');
|
|
|
|
// Ajout de connexion a la bdd
|
|
require_once('../functions/databaseConnection.php');
|
|
|
|
// Ajout des logs Discord
|
|
require_once('../functions/sendLogs.php');
|
|
|
|
// La requête doit être un POST sinon on l'a refuse
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
header('Location: ./../pages/login.php');
|
|
exit;
|
|
}
|
|
|
|
$username = trim($_POST['username'] ?? '');
|
|
$password = $_POST['password'] ?? '';
|
|
|
|
try {
|
|
$stmt = $dbh->prepare('SELECT id, username, password, role FROM users WHERE username = :username LIMIT 1');
|
|
$stmt->execute([':username' => $username]);
|
|
$user = $stmt->fetch();
|
|
} catch (PDOException $e) {
|
|
error_log('Erreur sql dans la requête : ' . $e->getMessage());
|
|
header('Location: ./../pages/login.php');
|
|
exit;
|
|
}
|
|
|
|
// On regarde si le mdp correspond à celui en bdd
|
|
if (!$user || !password_verify($password, $user['password'])) {
|
|
// Log Discord : tentative de connexion échouée (utile pour repérer le bruteforce)
|
|
sendLog("Tentative de connexion échouée avec l'identifiant : " . $username);
|
|
header('Location: ./../pages/login.php');
|
|
exit;
|
|
}
|
|
|
|
// Régénère l'ID de session à la connexion : empêche la fixation de session
|
|
// (un attaquant qui aurait imposé un ID de session à la victime avant sa
|
|
// connexion ne peut plus récupérer une session authentifiée avec cet ID)
|
|
session_regenerate_id(true);
|
|
|
|
// Si la connexion est ok, on entregistre l'utilisateur dans $_SESSION
|
|
$_SESSION['user_id'] = $user['id'];
|
|
$_SESSION['username'] = $user['username'];
|
|
$_SESSION['role'] = $user['role'];
|
|
|
|
// Date de connexion mise à jour
|
|
try {
|
|
$stmt = $dbh->prepare('UPDATE users SET last_login = NOW() WHERE id = :id');
|
|
$stmt->execute([':id' => $user['id']]);
|
|
} catch (PDOException $e) {
|
|
error_log('Le serveur WEB ne peut pas modifier la date de dernière connexion : ' . $e->getMessage());
|
|
}
|
|
|
|
// Log Discord : connexion réussie
|
|
sendLog("Connexion réussie", $user['username']);
|
|
|
|
//Redirection vers home.php puisque que l'utilisateur est forcément connecté
|
|
// (?login=1 déclenche la notification "Connexion réussie" sur la page)
|
|
header('Location: ./../pages/home.php?login=1');
|
|
exit;
|
|
?>
|