mon-site-perso/admin/config.php
2025-09-12 10:57:48 +02:00

119 lines
3.8 KiB
PHP

<?php
// Configuration de sécurité
// IMPORTANT: Remplacez le hash ci-dessous par le hash de votre mot de passe
// Utilisez generate_password_hash.php pour générer le hash
define('ADMIN_PASSWORD_HASH', '$2y$10$5L/rCnFdy8GEXBH85Rce.ujXeb9JC1LH0Uvyltx3p2EtbhxXKJpna'); // Hash de "Toine1990@"
define('ADMIN_USERNAME', 'toine');
define('SESSION_TIMEOUT', 3600); // 1 heure
define('MAX_LOGIN_ATTEMPTS', 5);
define('LOGIN_LOCKOUT_TIME', 900); // 15 minutes
// Configuration de session sécurisée - DOIT être appelé AVANT session_start()
function configureSecureSession() {
// Paramètres de sécurité pour les sessions
ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_secure', isset($_SERVER['HTTPS']));
ini_set('session.use_strict_mode', 1);
ini_set('session.cookie_samesite', 'Strict');
}
// Fonction à appeler APRÈS session_start()
function initSecureSession() {
// Régénérer l'ID de session périodiquement
if (!isset($_SESSION['last_regeneration'])) {
$_SESSION['last_regeneration'] = time();
} elseif (time() - $_SESSION['last_regeneration'] > 300) { // 5 minutes
session_regenerate_id(true);
$_SESSION['last_regeneration'] = time();
}
}
// Fonction pour vérifier les tentatives de connexion
function checkLoginAttempts($ip) {
$attempts_file = __DIR__ . '/login_attempts.json';
if (!file_exists($attempts_file)) {
return true;
}
$attempts_data = file_get_contents($attempts_file);
$attempts = $attempts_data ? json_decode($attempts_data, true) : [];
if (isset($attempts[$ip])) {
$last_attempt = $attempts[$ip]['last_attempt'];
$attempt_count = $attempts[$ip]['count'];
// Si le délai de blocage est écoulé, réinitialiser
if (time() - $last_attempt > LOGIN_LOCKOUT_TIME) {
unset($attempts[$ip]);
file_put_contents($attempts_file, json_encode($attempts));
return true;
}
// Si trop de tentatives
if ($attempt_count >= MAX_LOGIN_ATTEMPTS) {
return false;
}
}
return true;
}
// Fonction pour enregistrer une tentative de connexion
function recordLoginAttempt($ip, $success = false) {
$attempts_file = __DIR__ . '/login_attempts.json';
$attempts_data = file_exists($attempts_file) ? file_get_contents($attempts_file) : '{}';
$attempts = json_decode($attempts_data, true) ?: [];
if ($success) {
// Supprimer les tentatives en cas de succès
if (isset($attempts[$ip])) {
unset($attempts[$ip]);
}
} else {
// Enregistrer la tentative échouée
$attempts[$ip] = [
'count' => ($attempts[$ip]['count'] ?? 0) + 1,
'last_attempt' => time()
];
}
file_put_contents($attempts_file, json_encode($attempts));
}
// Générer un token CSRF
function generateCSRFToken() {
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
// Vérifier le token CSRF
function verifyCSRFToken($token) {
return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token);
}
// Vérifier si l'utilisateur est connecté et la session est valide
function isAuthenticated() {
if (!isset($_SESSION['connected']) || !$_SESSION['connected']) {
return false;
}
// Vérifier le timeout de session
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > SESSION_TIMEOUT)) {
session_destroy();
return false;
}
// Mettre à jour l'activité
$_SESSION['last_activity'] = time();
return true;
}
// Nettoyer et valider les données d'entrée
function sanitizeInput($data) {
return htmlspecialchars(trim($data), ENT_QUOTES, 'UTF-8');
}
?>