# Kif timplimentaw uploads sikuri tal-fajls f'PHP: sigurtà tal-uploads f'PHP

> Sigurtà tal-uploads f'PHP: ivverifikaw it-tip tal-fajl fuq is-server, semmew mill-ġdid il-fajls, aħżnuhom barra mill-webroot u imblukkaw l-eżekuzzjoni.

Sors: https://phpsos.de/mt/ratgeber/datei-upload-sicher/  
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à tal-uploads f'PHP ma tiddeċiedix verifika waħda, imma l-kombinazzjoni: tivverifikaw it-tip tal-fajl fuq is-server, issemmu mill-ġdid il-fajls, taħżnuhom barra mill-webroot u ma tippermettux eżekuzzjoni ta' skripts fil-folder tal-upload. Formola tal-upload mhux ivverifikata hija waħda mit-toroq klassiċi li bihom l-attakkanti jdaħħlu backdoor fuq server tal-web.

## Għaliex il-formoli tal-upload huma punt favorit ta' dħul

Kull formola li taċċetta fajls tikteb data barranija fuq is-server tagħkom. Dan jinkludi formoli ta' applikazzjoni, portals tal-klijenti, gallariji tal-immaġini, żoni ta' appoġġ u ħafna estensjonijiet ta' CMS u ħwienet. Jekk attakkant jirnexxilu jpoġġi hemm fajl li s-server tal-web imbagħad jesegwixxi bħala PHP, ikollu backdoor permanenti.

Għall-maniġment dan ifisser: upload li jidher bla ħsara għal CVs jista' fl-agħar każ iwassal biex jittieħed is-server tal-web kollu. Barra minn hekk, fil-folders tal-upload spiss ikun hemm data personali li, b'konfigurazzjoni żbaljata, tista' tinqara pubblikament.

Għall-admins u l-iżviluppaturi dan ifisser: il-kodiċi tal-applikazzjoni u l-konfigurazzjoni tas-server iridu jaqblu. Dgħufija f'livell waħda spiss tinqabad mill-oħra, jekk it-tnejn jiġu implimentati sewwa. Kif issibu fajls diġà introdotti tiddeskrivi l-gwida [Kif tagħrfu u tneħħu webshells](https://phpsos.de/mt/ratgeber/webshell-erkennen/).

## Ir-regoli bażiċi għas-sigurtà tal-uploads f'PHP

Ir-regoli li ġejjin jikkorrispondu għar-rakkomandazzjonijiet tal-OWASP Cheat Sheets u ppruvaw ruħhom fit-tħaddim:

- **Lista permessa minflok lista bloċċata:** Aċċettaw biss tipi ta' fajls espliċitament permessi, pereżempju PDF, JPG u PNG. Listi bloċċati għal estensjonijiet individwali jistgħu jiġu evitati permezz ta' varjanti u estensjonijiet doppji.
- **Ivverifikaw il-kontenut, mhux biss l-estensjoni:** Iddeterminaw it-tip attwali fuq is-server b'`finfo`. It-tip MIME f'`$_FILES` huwa dikjarazzjoni tal-mittent u mhux affidabbli.
- **Isem ġdid tal-fajl:** Qatt ma tużaw l-isem oriġinali bħala isem tal-fajl. Oħolqu isem każwali u żidu l-estensjoni mil-lista permessa.
- **Ħażna barra mill-webroot:** Aħżnu l-fajls b'mod li ma jintlaħqux direttament permezz ta' URL. Il-konsenja ssir permezz ta' skript b'verifika tal-awtorizzazzjoni.
- **Illimitaw id-daqs:** Fl-applikazzjoni, f'PHP u fis-server tal-web.
- **L-ebda eżekuzzjoni:** Jekk l-uploads xorta jridu jkunu fil-webroot, itfu l-eżekuzzjoni ta' skripts f'dan id-direttorju.
- **Verifika biss fuq is-server:** Verifiki ta' JavaScript fil-browser itejbu l-użu, imma ma jipproteġux.

## Eżempju sikur b'finfo u isem każwali

L-eżempju li ġej juri l-qalba ta' pproċessar sikur. Huwa apposta qasir u jrid jiddaħħal fl-applikazzjoni tagħkom, jiġifieri b'login, verifika tal-awtorizzazzjoni, protezzjoni CSRF u reġistrazzjoni.

```php
<?php
declare(strict_types=1);

const MAX_BYTES  = 5 * 1024 * 1024; // 5 MB
const ERLAUBT    = [
    'application/pdf' => 'pdf',
    'image/jpeg'      => 'jpg',
    'image/png'       => 'png',
];
const ZIELORDNER = '/var/www/daten/uploads'; // barra mill-webroot

$datei = $_FILES['dokument'] ?? null;

if (!is_array($datei) || $datei['error'] !== UPLOAD_ERR_OK) {
    http_response_code(400);
    exit('Upload fehlgeschlagen.');
}

if ($datei['size'] > MAX_BYTES || !is_uploaded_file($datei['tmp_name'])) {
    http_response_code(400);
    exit('Datei ungültig.');
}

$finfo = new finfo(FILEINFO_MIME_TYPE);
$typ   = $finfo->file($datei['tmp_name']);

if (!isset(ERLAUBT[$typ])) {
    http_response_code(415);
    exit('Dateityp nicht erlaubt.');
}

$name = bin2hex(random_bytes(16)) . '.' . ERLAUBT[$typ];
$ziel = ZIELORDNER . '/' . $name;

if (!move_uploaded_file($datei['tmp_name'], $ziel)) {
    http_response_code(500);
    exit('Speichern fehlgeschlagen.');
}

chmod($ziel, 0640);
// Aħżnu l-isem oriġinali biss bħala test fid-database
// u f'kull output eskeppjawh b'htmlspecialchars().
```

Għall-immaġini jixraq pass ieħor: ikkodifikaw mill-ġdid l-immaġni b'GD jew Imagick u armu l-metadata. Dan ma jissostitwixxix il-verifiki l-oħra, imma jnaqqas ir-riskju li jifdal minħabba data barranija inkorporata.

Għal dokumenti minn sorsi mhux magħrufa, pereżempju applikazzjonijiet jew ritratti ta' ilmenti, huwa sensat ukoll scan tal-viruses qabel ma jingħaddew 'il quddiem. Jipproteġi anqas is-server tal-web milli l-impjegati li aktar tard jiftħu l-fajls fuq il-kompjuters tax-xogħol tagħhom. Irreġistraw ukoll kull upload bil-ħin, il-kont, id-daqs tal-fajl u t-tip identifikat, biex mudelli mhux tas-soltu jkunu jistgħu jiġu traċċati aktar tard.

F'CMS u ħwienet il-libreriji tal-midja inkorporati ġeneralment iġibu verifiki proprji. Aktar riskjużi huma l-estensjonijiet tal-formoli, il-funzjonijiet ta' importazzjoni u paġni addizzjonali mibnija apposta, li jaħżnu fajls billi jevitaw il-librerija. Propju dawn il-postijiet għandkom tħarsu lejhom l-ewwel waqt verifika.

> **Suġġeriment:**
> Ikkunsinjaw fajls mill-folder protett b'`Content-Disposition: attachment` u `X-Content-Type-Options: nosniff`. Imbagħad il-browser ma juri direttament l-ebda kontenut problematiku, imma joffrih bħala download.

## Itfu l-eżekuzzjoni ta' PHP fil-folder tal-upload

Anke jekk fajl b'kontenut żbaljat jgħaddi, is-server tal-web m'għandux jesegwih bħala skript. Din it-tieni saff ta' protezzjoni tappartjeni fuq kull server li jaħżen uploads fil-webroot.

Għal Nginx b'PHP-FPM:

```nginx
location ^~ /uploads/ {
    location ~* \.(php|phtml|phar)$ {
        deny all;
    }
}
```

Għal Apache, l-aħjar direttament fil-VirtualHost minflok f'`.htaccess`, biex ir-regola ma tkunx tista' tiġi megħluba mill-applikazzjoni:

```apache
<Directory "/var/www/html/uploads">
    AllowOverride None
    <FilesMatch "\.(php|phtml|phar)$">
        Require all denied
    </FilesMatch>
</Directory>
```

Jekk PHP jaħdem bħala modulu ta' Apache (mod_php), fl-istess blokk tistgħu iżżidu wkoll `php_admin_flag engine off`. Wara l-bidla ivverifikaw b'fajl tat-test bla ħsara, li jtella' test biss, li s-server iweġibha b'403.

## Limiti tad-daqs u r-rabta ma' PHP2Shell

L-uploads huma marbutin mill-qrib mal-issettjar ta' PHP `post_max_size` u `upload_max_filesize`. Fil-kuntest ta' PHP2Shell php.net jirrakkomanda bħala miżura temporanja li `post_max_size` jiġi ffissat fuq 8M meta ma jinħtieġu l-ebda uploads, jew fuq 32M b'uploads, u `upload_max_filesize` jinżamm taħtu. Din mhix protezzjoni sħiħa u ma tissostitwixxix l-aġġornament għal verżjoni rranġata ta' PHP.

```ini
; php.ini jew pool FPM (php_admin_value), wara dan erġgħu ibdew il-workers kollha
file_uploads        = On
post_max_size       = 32M
upload_max_filesize = 20M
max_file_uploads    = 5
```

Jekk websajt ma teħtieġ l-ebda uploads, `file_uploads = Off` hija l-aktar soluzzjoni nadifa. Liema issettjar huma sensati sal-patch jinsab taħt [Miżuri immedjati mingħajr patch](https://phpsos.de/mt/php2shell/sofortmassnahmen-ohne-patch/). Drittijiet xierqa għal direttorji tal-upload tiddeskrivi l-gwida [Drittijiet tal-fajls fuq is-server tal-web](https://phpsos.de/mt/ratgeber/dateirechte-webserver/).

## Żbalji tipiċi fil-funzjonijiet tal-upload

Meta jiġu eżaminati applikazzjonijiet eżistenti, l-istess mudelli jidhru ripetutament. Ivverifikaw il-formoli tagħkom b'mod immirat għal dawn il-punti:

- L-estensjoni tiġi vverifikata biss parzjalment, hekk li ismijiet tal-fajls b'diversi estensjonijiet jgħaddu.
- L-isem oriġinali mill-formola jispiċċa fil-mogħdija tal-ħażna. Dan jiftaħ toroq għall-manipulazzjoni tal-mogħdijiet u għas-sovrascrittura ta' fajls eżistenti.
- L-uploads jinsabu pubblikament b'ismijiet prevedibbli. Fil-każ ta' applikazzjonijiet jew kuntratti dan huwa wkoll problema ta' protezzjoni tad-data.
- Il-folder tal-upload jista' jinkiteb mis-server tal-web u fl-istess ħin jista' jiġi eżegwit.
- Estensjonijiet qodma tal-upload jew plugins tal-formoli ma jiġux aġġornati, għalkemm il-manifattur ippubblika aġġornamenti tas-sigurtà.
- L-iżbalji ma jiġux irreġistrati. Uploads miċħuda, madankollu, huma sinjal bikri ta' tentattivi immirati.

## Kif tgħin PHP SOS b'mod konkret?

- Nivverifikaw il-funzjonijiet tal-upload tagħkom fil-kodiċi u fil-konfigurazzjoni tas-server u nsemmu dgħufijiet konkreti bi prijorità.
- Napplikaw is-sakra tal-eżekuzzjoni fil-folder tal-upload, drittijiet xierqa u limiti tad-daqs fil-qafas tat-[Tisħiħ tas-server](https://phpsos.de/mt/leistungen/server-haertung/).
- B'suspett infittxu fid-direttorji tal-upload skripts introdotti u ninnadfuhom permezz tat-[Tneħħija ta' malware](https://phpsos.de/mt/leistungen/malware-entfernung/) tagħna.
- Fuq talba nħallu l-implimentazzjoni tiġi vverifikata b'mod indipendenti permezz ta' [test ta' penetrazzjoni](https://phpsos.de/mt/leistungen/sicherheitsaudit-penetrationstest/).


## Mistoqsijiet frekwenti

**Huwa biżżejjed li tiġi vverifikata l-estensjoni tal-fajl fl-upload?**  
Le. L-estensjoni u t-tip MIME irrapportat mill-browser ġejjin mill-mittent u jistgħu jintgħażlu liberament. Ivverifikaw il-kontenut fuq is-server, agħtu isem ġdid lill-fajl u imblukkaw l-eżekuzzjoni tal-iskripts fid-direttorju tal-uploads.

**Fejn għandhom jinħażnu l-fajls mgħobbija?**  
L-aħjar barra mid-direttorju pubbliku tal-web. Il-konsenja imbagħad tieħu hi skript li qabel jivverifika jekk l-utent jistax jara l-fajl. Hekk il-fajls la jistgħu jinfetħu direttament u lanqas jiġu eżegwiti.

**Fajls SVG bħala immaġini huma bla periklu?**  
Mhux awtomatikament. SVG huwa XML u jista' jkun fih kontenut attiv. Ippermettu SVG biss jekk tnaddfu l-fajls jew tikkunsinjawhom esklussivament bħala download bl-header Content-Disposition xieraq.

**Id-daqs tal-upload għandu x'jaqsam ma' PHP2Shell?**  
Iva, indirettament. php.net jirrakkomanda bħala miżura temporanja valuri aktar baxxi għal post_max_size u upload_max_filesize. Dan inaqqas ir-riskju, imma ma jissostitwixxix l-aġġornament għal verżjoni rranġata ta' PHP u r-restart tal-workers kollha.

## Sorsi

- [OWASP Cheat Sheet Series (File Upload)](https://cheatsheetseries.owasp.org/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [php.net: Avviżi tas-sigurtà dwar PHP2Shell](https://www.php.net/)
