# Deserjalizzazzjoni mhux sikura f'PHP: unserialize u sigurtà

> Uża unserialize ta' PHP b'mod sikur: għaliex oġġetti minn inputs huma perikolużi, kif JSON, allowed_classes u firem jipproteġu u fejn tfittxu.

Sors: https://phpsos.de/mt/ratgeber/deserialisierung-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:** Fis-sigurtà ta' unserialize f'PHP tgħodd regola sempliċi: qatt ma tipproċessaw b'`unserialize()` data li ġejja minn barra. Uża minflok JSON. Fejn `unserialize()` minn kodiċi qadim irid jibqa', illimitawh b'`allowed_classes => false` u ivverifikaw l-awtentiċità tad-data b'firma.

## X'jista' jmur ħażin b'unserialize()

PHP jista' jibdel arrays u oġġetti b'`serialize()` f'katina ta' karattri u jirrestawrahom b'`unserialize()`. Dan huwa komdu biex data tinħażen f'cookies, caches jew oqsma tad-database. Il-problema: `unserialize()` joħloq hekk ukoll oġġetti ta' klassijiet arbitrarji li jistgħu jitgħabbew fl-applikazzjoni.

Meta oġġett bħal dan jinħoloq, u l-aktar tard meta jinqered, PHP isejjaħ awtomatikament metodi ċerti, pereżempju `__wakeup()`, `__unserialize()` jew `__destruct()`. Jekk klassijiet fil-proġett jew fil-libreriji fihom metodi bħal dawn b'azzjonijiet fuq fajls, fuq database jew fuq is-sistema, attakkant jista' jabbużahom permezz ta' data manipulata. L-esperti jitkellmu dwar PHP Object Injection. Skont il-klassijiet eżistenti, l-effett jibda mit-tħassir ta' fajls individwali sal-eżekuzzjoni ta' kodiċi malizzjuż.

Miġbur għal min mhux tekniku: sejħa waħda mhux maħsuba fil-post żbaljat tista' tħalli attakkant jidħol bil-fond fl-applikazzjoni. Din id-dgħufija għalhekk għal snin tagħmel parti mit-temi tal-OWASP Top 10.

## L-alternattiva sikura: JSON minflok unserialize

Għal kważi l-każijiet kollha fejn id-data ġejja minn barra jew titlaq mis-server, JSON hija l-għażla t-tajba. `json_decode()` joħloq biss arrays, numri, katini ta' karattri u valuri tal-verità, l-ebda oġġetti ta' klassijiet proprji.

```php
<?php
declare(strict_types=1);

function leseEinstellungen(string $eingabe): array
{
    try {
        $daten = json_decode($eingabe, true, 16, JSON_THROW_ON_ERROR);
    } catch (JsonException $e) {
        throw new InvalidArgumentException('Ungültige Daten.');
    }

    if (!is_array($daten)) {
        throw new InvalidArgumentException('Erwartet wurde ein Objekt.');
    }

    // Ħudu biss oqsma magħrufa bit-tipi mistennija
    return [
        'sprache' => in_array($daten['sprache'] ?? '', ['de', 'en'], true) ? $daten['sprache'] : 'de',
        'seiten'  => max(1, min(100, (int) ($daten['seiten'] ?? 20))),
    ];
}
```

Importanti hija t-tieni parti: anke d-data JSON hija input. Ħudu biss oqsma mistennija u ivverifikaw it-tipi u l-firxiet tal-valuri qabel ma taħdmu biha.

## Meta unserialize ma jistax jiġi evitat: allowed_classes u firma

F'applikazzjonijiet eqdem id-data serjalizzata spiss tinsab f'databases jew caches li ma jistgħux jinbidlu minnufih. Allura tillimitaw ir-riskju f'żewġ passi. L-ewwel, b'`allowed_classes` tipprevjenu li jinħolqu oġġetti. It-tieni, b'firma HMAC tiżguraw li d-data verament ġejja mill-applikazzjoni tagħkom u ma nbidlitx fit-triq.

```php
<?php
declare(strict_types=1);

const SCHLUESSEL = 'aus-sicherer-konfiguration-laden'; // qatt fir-repository tal-kodiċi

function verpacken(array $daten): string
{
    $roh = serialize($daten);
    return hash_hmac('sha256', $roh, SCHLUESSEL) . '.' . base64_encode($roh);
}

function auspacken(string $paket): array
{
    [$signatur, $b64] = array_pad(explode('.', $paket, 2), 2, '');
    $roh = base64_decode($b64, true);

    if ($roh === false || !hash_equals(hash_hmac('sha256', $roh, SCHLUESSEL), $signatur)) {
        throw new RuntimeException('Signatur ungültig.');
    }

    $daten = unserialize($roh, ['allowed_classes' => false, 'max_depth' => 16]);
    if (!is_array($daten)) {
        throw new RuntimeException('Unerwartetes Format.');
    }
    return $daten;
}
```

Jekk jinħtieġu klassijiet speċifiċi, semmuhom individwalment f'`allowed_classes`, minflok ma tippermettuhom kollha. Iċ-ċavetta tappartjeni fil-konfigurazzjoni tas-server jew f'ħażna ta' sigrieti u trid tiġi mġedda wara inċident.

### Biddlu d-data eżistenti għal JSON pass wara pass

F'applikazzjonijiet li kibru, valuri serjalizzati spiss jinsabu fid-database għal snin. Bidla f'pass wieħed hija allura riskjuża. Tranżizzjoni ppruvat ruħha: l-applikazzjoni taqra ż-żewġ formati, imma tikteb biss JSON. Meta jinqara valur qadim, jiġi mpakkjat darba b'`allowed_classes => false` u jinkiteb minnufih lura bħala JSON. Wara ftit żmien il-biċċa l-kbira tal-entrati jkunu nbidlu, u skript uniku jagħmel il-bqija.

Irreġistraw matul it-tranżizzjoni kemm-il darba jinqara l-format qadim, u anke meta l-firem ma jaqblux. Falliment bħal dan jista' jindika tentattivi ta' manipulazzjoni u jappartjeni fis-sorveljanza. Biss meta ma jidher aktar format qadim, neħħu kompletament il-fergħa ta' `unserialize()` mill-kodiċi.

## Deserjalizzazzjoni moħbija: sessions, caches u mogħdijiet tal-fajls

Mhux kull deserjalizzazzjoni tidher fil-kodiċi proprju. Ivverifikaw ukoll dawn il-postijiet:

- **Sessions:** PHP jissjerjalizza awtomatikament id-data tas-session. Sakemm l-attakkanti ma jistgħux jiktbu l-fajls tas-sessions, dan mhuwiex kritiku. Mogħdijiet separati tas-sessions għal kull websajt tiddeskrivi l-gwida [Kif tassiguraw is-sessions f'PHP](https://phpsos.de/mt/ratgeber/session-sicherheit-php/).
- **Serializer tas-session:** L-avviż dwar [CVE-2026-115560](https://phpsos.de/mt/php2shell/cve-2026-115560/) jolqot konfigurazzjoni mhux tas-soltu fejn is-`serialize_handler` jinbidel waqt it-tħaddim permezz ta' `ini_set()` u l-upload progress tas-session huwa attiv. Rimedju skont php.net: `session.upload_progress.enabled=0` fil-php.ini jew fil-pool FPM, wara dan restart tal-workers.
- **Caches u kjuwijiet:** Redis, Memcached jew tabelli tad-database b'valuri serjalizzati huma sikuri biss daqs l-aċċess għalihom. Ma jappartjenux miftuħa fin-netwerk.
- **Funzjonijiet tal-fajls b'mogħdijiet minn inputs:** Qatt ma tgħaddu lil funzjonijiet tal-fajls mogħdijiet mit-talba. Stream wrappers bħal `phar://` inkella jistgħu jwasslu għal pproċessar mhux mistenni. Lista permessa għal ismijiet ta' fajls tipproteġi b'mod aktar affidabbli minn kull filtrar.
- **Dipendenzi:** Libreriji b'dgħufijiet magħrufa jkabbru l-possibbiltajiet ta' attakkant. Żommuhom aġġornati, kif deskritt fil-gwida [Kif tivverifikaw id-dipendenzi ta' Composer għal vulnerabbiltajiet](https://phpsos.de/mt/ratgeber/composer-abhaengigkeiten-pruefen/).

## Sib postijiet riskjużi fil-kodiċi

L-ewwel inventarju jirnexxi b'tiftix sempliċi. Ma jbiddel xejn fis-sistema u juri s-sejħiet kollha barra mid-direttorju `vendor`:

```bash
grep -rn --include='*.php' 'unserialize(' /var/www/projekt \
  | grep -v '/vendor/'
```

Evalwaw kull sejba b'tliet mistoqsijiet: minn fejn ġejja d-data? Utent jista' jibdilha? `allowed_classes` huwa ffissat? Sejbiet b'inputs minn cookies, `$_GET`, `$_POST`, `$_REQUEST` jew interfaces esterni għandhom prijorità. Issostitwuhom b'JSON u ttestjaw il-bidla qabel ma timplimentawha.

Indikazzjoni oħra tinsab fil-browser. Data serjalizzata ta' PHP għandha struttura tipika b'identifikaturi tat-tip u indikazzjonijiet tat-tul. Jekk issibu valuri bħal dawn f'cookies, f'oqsma moħbija tal-formoli jew f'parametri tal-websajt proprja tagħkom, l-applikazzjoni tat data serjalizzata lill-viżitatur u probabbilment tistenniha lura. Propju dawn il-postijiet iridu jiġu vverifikati.

Għall-maniġment hija biżżejjed mistoqsija sempliċi lill-iżviluppaturi jew lill-aġenzija: “L-applikazzjoni tagħna tipproċessa x'imkien data serjalizzata li ġejja minn barra, u jekk iva, kif hija protetta?” Tweġiba ċara b'postijiet misjuba hija sinjal tajjeb. Tweġiba evażiva hija raġuni biex l-applikazzjoni tiġi vverifikata.

## Kif tgħin PHP SOS b'mod konkret?

- Infittxu fil-kodiċi tagħkom għal deserjalizzazzjoni b'data barranija u nevalwaw kull sejba skont l-aċċessibbiltà u l-impatt.
- Nipproponu bidliet konkreti għal JSON jew sejħiet assigurati u nakkumpanjaw l-iżviluppaturi tagħkom fl-implimentazzjoni.
- Nivverifikaw id-dipendenzi għal dgħufijiet magħrufa u niddokumentaw l-istat.
- Fuq talba nħallu l-applikazzjoni tiġi vverifikata b'mod indipendenti fil-qafas ta' [awdit tas-sigurtà u test ta' penetrazzjoni](https://phpsos.de/mt/leistungen/sicherheitsaudit-penetrationstest/).


## Mistoqsijiet frekwenti

**unserialize() f'PHP huwa fundamentalment mhux sikur?**  
Mhux għal data li tinħoloq biss mill-applikazzjoni tagħkom stess u li ħadd ma jista' jbiddel. Isir perikoluż hekk kif utenti jew terzi jistgħu jinfluwenzaw l-input, pereżempju permezz ta' cookies, oqsma tal-formoli jew interfaces esterni.

**allowed_classes => false huwa biżżejjed bħala protezzjoni?**  
Jipprevjeni li jinħolqu oġġetti arbitrarji u hekk jagħlaq l-aktar triq importanti ta' attakk. Għal inputs minn barra JSON xorta huwa l-aħjar għażla, għax il-parser huwa aktar sempliċi u ma jerġax jibni oġġetti.

**Aġġornament tal-libreriji jgħin kontra attakki ta' deserjalizzazzjoni?**  
Parzjalment. L-attakki spiss jużaw klassijiet minn dipendenzi li, meta oġġett jinqered jew jiġi mqajjem, jesegwixxu azzjonijiet. Pakketti attwali jagħlqu ktajjen magħrufa, imma l-kawża reali hija s-sejħa ta' unserialize b'data barranija.

**PHP2Shell għandu x'jaqsam mad-deserjalizzazzjoni?**  
Iż-żewġ vulnerabbiltajiet prinċipali jinsabu fl-ipproċessar tat-talbiet ta' PHP. L-avviż dwar CVE-2026-115560, min-naħa l-oħra, jolqot konfigurazzjoni mhux tas-soltu tas-serjalizzazzjoni tas-session. Ir-rimedju hemmhekk huwa session.upload_progress.enabled=0.

## Sorsi

- [OWASP Cheat Sheet Series (Deserialization)](https://cheatsheetseries.owasp.org/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [php.net: Avviżi tas-sigurtà](https://www.php.net/)
