Mecanismul de sesiuni din PHP păstrează starea unui utilizator autentificat între cererile HTTP. Dacă sesiunea nu este configurată cu parametri de securitate stricți, aplicația devine vulnerabilă la atacuri de tip Session Hijacking (furtul cookie-ului de sesiune) și Session Fixation.
<?php
declare(strict_types=1);
// Configurarea parametrilor de securitate direct în apelul session_start()
session_start([
'cookie_lifetime' => 7200, // Sesiunea expiră după 2 ore
'cookie_httponly' => true, // JavaScript (document.cookie) NU poate citi cookie-ul (previne XSS!)
'cookie_secure' => true, // Cookie-ul este transmis EXCLUSIV prin conexiuni HTTPS criptate
'cookie_samesite' => 'Lax', // Protecție nativă împotriva atacurilor CSRF
'use_strict_mode' => true, // Previne atacurile de tip Session Fixation
'sid_bits_per_character' => 6, // ID-uri de sesiune cu entropie maximă
]);
// 1. Procedura obligatorie la autentificarea utilizatorului (Login):
function autentificaUtilizator(int $userId, string $nume): void {
// REGENEREAZĂ ID-ul de sesiune și șterge fișierul vechi (esențial împotriva Fixation!):
session_regenerate_id(true);
$_SESSION['user_id'] = $userId;
$_SESSION['user_name'] = $nume;
$_SESSION['ip_adresa'] = $_SERVER['REMOTE_ADDR'] ?? '';
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'] ?? '';
$_SESSION['autentificat_la'] = time();
}
// 2. Procedura de deconectare sigură (Logout complet):
function deconectareUtilizator(): void {
$_SESSION = [];
// Șterge cookie-ul din browserul utilizatorului
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();
}
De ce este critic parametrul cookie_httponly: true
Chiar dacă un atacator reușește să găsească o vulnerabilitate XSS în pagina ta și să injecteze un script JavaScript malițios, setarea cookie_httponly => true împiedică scriptul să citească cookie-ul PHPSESSID. Astfel, atacatorul nu poate clona sesiunea utilizatorului pentru a se conecta în contul său.