first commit
This commit is contained in:
commit
b216a187bd
34 changed files with 4829 additions and 0 deletions
119
admin/config.php
Normal file
119
admin/config.php
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
<?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');
|
||||
}
|
||||
?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue