# Kif tassiguraw is-sessions f'PHP: sigurtà tas-sessions fil-prattika

> Sigurtà tas-sessions f'PHP: valuri sikuri tal-php.ini, session ID ġdida wara l-login, flags tal-cookies u l-avviż ta' PHP2Shell dwar l-upload.

Sors: https://phpsos.de/mt/ratgeber/session-sicherheit-php/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**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.

```ini
; 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
<?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.

```ini
; 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](https://phpsos.de/mt/ratgeber/open-basedir/). 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](https://phpsos.de/mt/php2shell/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](https://phpsos.de/mt/php2shell/php-fpm-neustart/).

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](https://phpsos.de/mt/leistungen/server-haertung/).
- 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

- [OWASP Cheat Sheet Series (Session Management)](https://cheatsheetseries.owasp.org/)
- [php.net: Avviżi tas-sigurtà dwar PHP2Shell](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
