Sitwazzjoni attwali: PHP2Shell. Żewġ vulnerabbiltajiet kritiċi ta' PHP (CVSS 9,2) jippermettu kodiċi malizzjuż mingħajr login. Patches mill-21/10/2026.X'għandu jsir issa →

Kif tassiguraw is-sessions f'PHP: sigurtà tas-sessions fil-prattika

Is-sessions iżommu l-utenti illoggjati u huma għalhekk mira li tixraq. Kif tikkonfiguraw b'mod sikur cookies, session IDs u postijiet ta' ħażna u tapplikaw l-avviż ta' PHP2Shell dwar l-upload progress.

Stat 6 min. qariGwidi

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.

Importanti

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_cookies u use_trans_sid = 0 jipprevjenu 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.

Sorsi

Kuntatt immedjat

Kull siegħa tgħodd. Iktbu lilna issa.

Iddeskrivu fil-qosor is-sistema, il-verżjoni ta' PHP u dak li osservajtu. Nikkuntattjawkom, niċċaraw is-sitwazzjoni u naħdmu mill-bogħod sakemm l-inċident jingħalaq u jiġi ddokumentat.

Għajnuna immedjata