Fil-qosor: Għas-sigurtà tas-sessions f'PHP jgħoddu erba' affarijiet: issettjar sikur tal-cookies, session ID ġdida wara kull login, postijiet ta' ħażna separati u protetti u ħinijiet qosra. Minħabba PHP2Shell, session.upload_progress.enabled=0 għandu jkun iffissat ukoll fuq in-naħa tas-server, sakemm ma jkunx hemm raġuni għal din il-funzjoni.
Għaliex is-sessions huma mira li tixraq
Session tiftakar li utent huwa illoggjat. Teknikament il-browser jirċievi għal dan session ID każwali f'cookie, u s-server jaħżen id-data relatata. Min jaf din l-ID huwa għall-applikazzjoni l-istess utent, mingħajr password u mingħajr it-tieni fattur.
Għall-operaturi dan ifisser: amministrazzjoni dgħajfa tas-sessions tista' tneħħi l-protezzjoni tal-login, anke jekk il-passwords u l-awtentikazzjoni b'żewġ fatturi huma implimentati sewwa. Dan huwa speċjalment kritiku fl-oqsma tal-amministrazzjoni, fil-kontijiet tal-klijenti u fil-portals b'data personali.
Ir-riskji tipiċi huma t-teħid tas-session ID (session hijacking), il-ġbid ta' ID magħrufa qabel il-login (session fixation) u sessions validi għal żmien twil żżejjed fuq kompjuters maqsuma.
Issettjar bażiku sikur fil-php.ini
L-aktar valuri importanti jistgħu jiġu ffissati ċentralment fil-php.ini jew għal kull websajt fil-pool FPM. Fil-pool użaw php_admin_value jew php_admin_flag, biex l-applikazzjoni ma tkunx tista' tegħleb il-valuri.
; Tisħiħ bażiku tas-sessions
session.use_strict_mode = 1
session.use_only_cookies = 1
session.use_trans_sid = 0
session.cookie_httponly = 1
session.cookie_secure = 1
session.cookie_samesite = "Lax"
session.cookie_lifetime = 0
session.gc_maxlifetime = 1800
session.name = "APPSESSID"
; Avviż ta' PHP2Shell minn php.net, wara dan erġgħu ibdew il-workers kollha
session.upload_progress.enabled = 0
use_strict_mode jiżgura li PHP ma jieħu l-ebda ID mhux magħrufa ffissata mill-browser. cookie_httponly jipprevjeni li JavaScript jaqra l-ID, u dan jillimita l-konsegwenzi ta' Cross-Site Scripting. cookie_secure jibgħat il-cookie biss permezz ta' HTTPS. SameSite=Lax jagħmel it-talbiet cross-site b'session valida aktar diffiċli; għal oqsma ta' amministrazzjoni pura jista' jaqbel Strict.
Il-ħin ta' 1.800 sekonda huwa valur ta' eżempju. Iffissawh skont il-ħtieġa ta' protezzjoni: iqsar għall-amministrazzjoni u d-data tal-klijenti, itwal biss fejn hemm ħtieġa operattiva.
Oqogħdu attenti li gc_maxlifetime jiffissa biss minn meta d-data qadima tas-session tista' titħassar. F'xi distribuzzjonijiet mhux PHP stess, imma job regolari tas-sistema jnaddaf il-fajls tas-sessions. Ivverifikaw allura liema valur juża dan il-job, biex l-issettjar tagħkom verament jaħdem. Għall-logout awtomatiku wara inattività ma tistrieħux fuq il-funzjoni tat-tindif biss, imma ivverifikaw il-ħin tal-aħħar azzjoni fl-applikazzjoni nnifisha, kif muri fl-eżempju li ġej.
Iġġeddu s-session ID wara l-login
L-aktar regola importanti fil-kodiċi hija li s-session ID tinħoloq mill-ġdid f'kull bidla ta' awtorizzazzjoni, jiġifieri fil-login, fil-bidla għal modalità ta' amministratur u fil-logout. L-eżempju li ġej juri mudell bażiku nadif b'password_verify():
<?php
declare(strict_types=1);
session_start();
function anmelden(PDO $db, string $email, string $passwort): bool
{
$stmt = $db->prepare('SELECT id, passwort_hash FROM benutzer WHERE email = :email');
$stmt->execute(['email' => $email]);
$nutzer = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$nutzer || !password_verify($passwort, $nutzer['passwort_hash'])) {
return false; // l-istess messaġġ għal indirizz żbaljat u password żbaljata
}
session_regenerate_id(true); // ID ġdida, armi l-qadima
$_SESSION['benutzer_id'] = (int) $nutzer['id'];
$_SESSION['letzte_aktion'] = time();
return true;
}
function pruefeLeerlauf(int $sekunden = 900): void
{
if (isset($_SESSION['letzte_aktion']) && time() - $_SESSION['letzte_aktion'] > $sekunden) {
abmelden();
return;
}
$_SESSION['letzte_aktion'] = time();
}
function abmelden(): void
{
$_SESSION = [];
$p = session_get_cookie_params();
setcookie(session_name(), '', [
'expires' => time() - 3600,
'path' => $p['path'],
'domain' => $p['domain'],
'secure' => $p['secure'],
'httponly' => $p['httponly'],
'samesite' => $p['samesite'],
]);
session_destroy();
}
Barra minn hekk, ipproteġu l-formoli li jbiddlu xi ħaġa b'token CSRF. Jinħoloq b'bin2hex(random_bytes(32)), jinżamm fis-session u jitqabbel meta tintbagħat il-formola b'hash_equals().
Postijiet ta' ħażna u separazzjoni tal-klijenti
B'mod standard PHP jaħżen is-sessions bħala fajls f'direttorju komuni. Fuq server b'diversi websajts dan jista' jfisser li websajt kompromessa tista' taqra s-sessions ta' oħra. Għalhekk għal kull websajt jappartjeni pool proprju b'utent proprju u mogħdija proprja tas-sessions.
; fil-pool FPM tal-websajt rispettiva
php_admin_value[session.save_path] = /var/lib/php/sessions/kunde-a
Id-direttorju għandu jappartjeni lill-utent tal-pool u jkollu d-drittijiet 0700. Kif tifirdu b'mod addizzjonali l-websajts minn xulxin tiddeskrivi l-gwida open_basedir u iżolament għal kull websajt. Jekk is-sessions jinħażnu f'Redis jew f'database, japplikaw l-istess prinċipji: aċċess proprju għal kull applikazzjoni, l-ebda aċċess miftuħ min-netwerk.
Sigurtà tas-sessions f'PHP u PHP2Shell
Il-vulnerabbiltajiet ta' PHP2Shell CVE-2026-109618 u CVE-2026-109619 jinsabu f'PHP innifsu. Bħala waħda mill-miżuri temporanji php.net isemmi li session.upload_progress.enabled=0 jiġi ffissat fil-php.ini, fil-pool FPM jew fil-konfigurazzjoni tas-server u wara dan il-workers kollha jerġgħu jinbdew. Espliċitament mhux permezz ta' ini_set() jew .user.ini.
Fit-23/10/2026 ġie avviż dwar CVE-2026-115560. Eżekuzzjoni possibbli ta' kodiċi teżisti hemmhekk biss b'kombinazzjoni mhux tas-soltu ta' serjalizzazzjoni tas-session, bidla permezz ta' ini_set() qabel session_start() u upload progress attiv. Ir-rimedju huwa l-istess issettjar, sal-bugfix release regolari li jmiss.
Dan l-issettjar huwa miżura temporanja u mhux protezzjoni sħiħa. Id-deċiżiv jibqa' l-aġġornament għal verżjoni rranġata ta' PHP u sussegwentement ir-restart tal-workers kollha ta' PHP.
Ivverifikaw wara l-bidla liema valur verament japplika. Il-linja tal-kmand spiss turi konfigurazzjoni differenti mis-server tal-web; sinifikanti hija paġna ta' verifika protetta, imħassra mill-ġdid wara, jew il-konfigurazzjoni tal-pool innifsha.
Żbalji tipiċi fis-sessions fl-applikazzjonijiet ta' PHP
Ħafna dgħufijiet ma jinqalgħux minn issettjar nieqes, imma mill-mod kif l-applikazzjonijiet jużaw is-sessions. Dawn il-mudelli għandkom tistaqsu dwarhom b'mod immirat fil-kodiċi proprju u għand il-fornituri tas-servizzi:
- Wisq fis-session: Passwords, data sħiħa tal-ħlas jew settijiet kbar tad-data ma jappartjenux fis-session. Aħżnu biss dak li hu meħtieġ għall-assenjazzjoni, pereżempju l-ID tal-utent u r-rwoli.
- Drittijiet biss mis-session: Min huwa amministratur għandu jiġi vverifikat kontra d-database f'azzjonijiet kritiċi. Inkella drittijiet imneħħija jibqgħu effettivi sat-tmiem tas-session.
- Session ID fl-indirizz: IDs fl-URLs jispiċċaw fil-logs, fl-istorja tal-browser u fl-indikazzjonijiet tar-referer.
use_only_cookiesuuse_trans_sid = 0jipprevjenu dan. - L-ebda tmiem tas-session: Jekk ma jkunx hemm timeout ta' inattività, amministratur fuq kompjuter maqsum jibqa' illoggjat b'mod mhux limitat.
- HTTPS wara proxy mhux identifikat sewwa: Jekk il-kriptaġġ jintemm fil-load balancer, l-applikazzjoni trid taf dan. Inkella tista' tiffissa cookies mingħajr il-flag
Secure.
Wara inċident tas-sigurtà jappartjeni wkoll li jiġu mormija s-sessions eżistenti kollha. L-aktar faċli huwa li titħassar il-kontenut tad-direttorju tas-sessions jew li jinbidel l-isem tas-session. L-utenti kollha jridu jerġgħu jilloggjaw, u sessions misruqa jsiru bla valur.
Kif tgħin PHP SOS b'mod konkret?
- Nivverifikaw l-issettjar tas-sessions, il-flags tal-cookies u l-postijiet ta' ħażna fuq il-websajts kollha ta' server u niddokumentaw il-valuri verament effettivi.
- Napplikaw il-miżuri temporanji ta' PHP2Shell għal kull pool, nerġgħu nibdew il-workers b'mod ikkontrollat u nuru r-riżultat.
- Nifirdu l-websajts b'pools u mogħdijiet tas-sessions proprji fil-qafas tat-Tisħiħ tas-server.
- Għal żviluppi proprji nivverifikaw il-login, il-logout u l-bidla tas-session fil-kodiċi u nirrakkomandaw bidliet konkreti.
Mistoqsijiet frekwenti
X'inhu s-session hijacking?
Fis-session hijacking attakkant jieħu s-session ta' utent illoggjat billi jakkwista s-session ID tiegħu. Bl-ID huwa għall-applikazzjoni dak l-utent, mingħajr ma jaf il-password. Flags sikuri tal-cookies u ħinijiet qosra jagħmluha ferm iktar diffiċli.
Għaliex is-session ID trid titfassal mill-ġdid wara l-login?
Jekk l-ID tibqa' l-istess qabel u wara l-login, ID magħrufa minn qabel jew mgħoddija bi tpattija tista' tibqa' valida wara l-login. session_regenerate_id(true) toħloq ID ġdida u tarmi l-qadima.
Nista' ntemm session.upload_progress.enabled permezz ta' ini_set()?
Le, dan skont php.net mhuwiex biżżejjed. L-issettjar jappartjeni fil-php.ini, fil-pool FPM jew fil-konfigurazzjoni tas-server, mhux f'ini_set() jew f'.user.ini. Wara dan il-workers kollha ta' PHP iridu jerġgħu jinbdew.
Fejn għandhom jinħażnu l-fajls tas-sessions?
F'direttorju barra mill-webroot li jista' jinqara biss mill-utent tal-pool rispettiv ta' PHP. Fuq servers b'diversi websajts, kull websajt għandu jkollha direttorju proprju tas-sessions.