An cás reatha: PHP2Shell. Ceadaíonn dhá leochaileacht chriticiúla PHP (CVSS 9.2) cód mailíseach gan logáil isteach. Paistí ar fáil ón 21 Deireadh Fómhair 2026.Cad atá le déanamh anois →

Conas a phróiseálann PHP uaslódálacha comhad

Idir an cliceáil ar Uaslódáil agus do chód tá slabhra próiseála iomlán i PHP. Míníonn an leathanach seo multipart/form-data, comhaid shealadacha, $_FILES, teorainneacha agus an nasc le PHP2Shell.

Staid Am léitheoireachta: 6 nóim.Eolas PHP

Go achomair: Nuair a uaslódálann brabhsálaí comhad, seolann sé iarratas POST san fhormáid multipart/form-data, ina bhfuil réimsí foirme agus ábhar comhad ina gcodanna ar leith, ceann i ndiaidh a chéile. Briseann PHP an t-iarratas seo as a stuaim féin, scríobhann sé gach cuid comhaid i gcomhad sealadach in upload_tmp_dir, cuireann sé na sonraí isteach i $_FILES agus ansin amháin tosaíonn sé do script. Aistríonn an script an comhad le move_uploaded_file(); scriosann PHP gach rud nár aistríodh ag deireadh an iarratais.

Conair comhaid ón mbrabhsálaí go dtí an script

Do lucht cinnteoireachta is é seo an rud is tábhachtaí: ní próiseas den fheidhmchlár amháin é uaslódáil. Tarlaíonn cuid mhór den obair san ateangaire PHP sula mbíonn cód an CMS nó an tsiopa páirteach ar chor ar bith. Dá bhrí sin bíonn tionchar ag earráidí sa chuid seo de PHP ar gach suíomh gréasáin, cibé an bhfuil foirm uaslódála aige nó nach bhfuil.

An sreabhadh i mbeagán focal:

  1. Seoltar an fhoirm le method="POST" agus enctype="multipart/form-data".
  2. Glacann an freastalaí gréasáin leis an iarratas agus seolann sé ar aghaidh chuig PHP é, de réir an mhodha oibriúcháin trí PHP-FPM, mod_php nó comhéadan eile.
  3. Seiceálann PHP teorainneacha ar nós post_max_size agus briseann sé an t-ábhar síos de réir teaghráin deighilteora, an Boundary mar a thugtar air.
  4. Téann gnáthréimsí isteach i $_POST; scríobhtar codanna comhaid i gcomhaid shealadacha agus déantar cur síos orthu i $_FILES.
  5. Anois amháin tosaíonn an script, seiceálann sé an comhad agus aistríonn sé chuig a cheann scríbe é.
  6. Ag deireadh an iarratais scriosann PHP na comhaid shealadacha go léir nár aistríodh.

multipart/form-data: struchtúr iarratais uaslódála

Is téacs glan é iarratas uaslódála le sonraí comhaid leabaithe. Ainmníonn an ceanntásc Content-Type an Boundary, agus san ábhar scarann an teaghrán seo na codanna ó chéile. Tá a gceanntásca féin ag gach cuid, le hainm réimse agus, más infheidhme, ainm comhaid. Sampla an-ghearr, neamhdhíobhálach:

POST /bewerbung HTTP/1.1
Content-Type: multipart/form-data; boundary=----trenner42

------trenner42
Content-Disposition: form-data; name="vorname"

Erika
------trenner42
Content-Disposition: form-data; name="lebenslauf"; filename="lebenslauf.pdf"
Content-Type: application/pdf

%PDF-1.7 ... Dateiinhalt ...
------trenner42--

Is ón seoltóir a thagann gach sonra sa téacs seo, ainm an chomhaid agus Content-Type na coda san áireamh. Glacann PHP leo isteach i $_FILES, ach ní sheiceálann sé an bhfuil siad inchreidte.

An t-eagar $_FILES

I gcás réimse darb ainm lebenslauf, tá na heochracha seo i $_FILES['lebenslauf'] de réir lámhleabhar PHP:

Eochair Ábhar An bhfuil muinín ann?
name ainm bunaidh an chomhaid ag an seoltóir níl
full_path cosán a thuairiscigh an brabhsálaí, ó PHP 8.1.0 i leith níl
type cineál MIME de réir an bhrabhsálaí, gan seiceáil ag PHP níl
size méid i mbearta cinnte ag PHP
tmp_name cosán an chomhaid shealadaigh ar an bhfreastalaí sannta ag PHP
error cód earráide na próiseála uaslódála socraithe ag PHP

I gcás réimsí le lúibíní cearnacha san ainm, mar shampla bilder[], tá eagar i ngach eochair le hiontráil amháin do gach comhad. Téann an feidhmchlár tríd, mar shampla, $_FILES['bilder']['error'] agus faigheann sé rochtain ar tmp_name agus name leis an innéacs céanna.

Is féidir le foirm réimse folaithe MAX_FILE_SIZE a sheoladh roimh an réimse comhaid freisin. De réir an lámhleabhair, is leid don bhrabhsálaí é sin amháin, a sheachnaítear go héasca. Ní féidir brath ach ar na teorainneacha a fhorfheidhmíonn an freastalaí: i PHP, sa fhreastalaí gréasáin agus sa fheidhmchlár féin.

Teorainneacha: treoracha php.ini d'uaslódálacha

Rialaíonn na treoracha seo próiseáil uaslódálacha. Tagann na luachanna réamhshocraithe ó lámhleabhar PHP agus is iad atá i bhfeidhm mura sáraíonn php.ini iad.

Treoir Réamhshocrú Inathraithe in
file_uploads 1 cumraíocht an chórais amháin
upload_tmp_dir folamh (temp an chórais) cumraíocht an chórais amháin
upload_max_filesize 2M php.ini, linn, cumraíocht eolaire
post_max_size 8M php.ini, linn, cumraíocht eolaire
max_file_uploads 20 php.ini, linn, cumraíocht eolaire
enable_post_data_reading 1 php.ini, linn, cumraíocht eolaire

Ní mór post_max_size a bheith níos mó ná upload_max_filesize, agus de réir an lámhleabhair ba cheart memory_limit a bheith níos mó ná post_max_size de ghnáth. Mura bhfuil upload_tmp_dir inscríofa, aistríonn PHP go dtí eolaire temp an chórais. Le open_basedir ní mór an t-eolaire temp a cheadú, nó teipeann ar uaslódálacha. Déanann an t-alt post_max_size agus upload_max_filesize a theorannú go ciallmhar cur síos ar luachanna praiticiúla agus ar a n-iarmhairtí.

Cóid earráide a mheas i gceart

Insíonn an réimse error cad a tharla le linn na próiseála. Téann na tairisigh ó UPLOAD_ERR_OK (0) trí UPLOAD_ERR_INI_SIZE (1), UPLOAD_ERR_FORM_SIZE (2), UPLOAD_ERR_PARTIAL (3) agus UPLOAD_ERR_NO_FILE (4) go UPLOAD_ERR_NO_TMP_DIR (6), UPLOAD_ERR_CANT_WRITE (7) agus UPLOAD_ERR_EXTENSION (8).

<?php
declare(strict_types=1);

$datei = $_FILES['lebenslauf'] ?? null;
if ($datei === null) {
    exit('Keine Upload-Daten, eventuell wurde post_max_size überschritten.');
}

$meldung = match ($datei['error']) {
    UPLOAD_ERR_OK => null,
    UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE => 'Datei zu groß.',
    UPLOAD_ERR_NO_FILE => 'Keine Datei gewählt.',
    default => 'Upload fehlgeschlagen.',
};

if ($meldung === null && is_uploaded_file($datei['tmp_name'])) {
    $ziel = '/srv/app/uploads/' . bin2hex(random_bytes(16)) . '.pdf';
    move_uploaded_file($datei['tmp_name'], $ziel);
}

Ní léiríonn an sampla ach an mheicníocht. Déanann an treoir Uaslódálacha comhad a chur i bhfeidhm go sábháilte i PHP cur síos ar sheiceáil chineál an chomhaid, stóráil lasmuigh den Webroot agus rith scripteanna a bhac.

Uaslódálacha agus PHP2Shell: cad is brí leis na bearta idirthréimhseacha

Bíonn tionchar ag leochaileachtaí PHP2Shell CVE-2026-109618 agus CVE-2026-109619 ar an bpróiseáil timpeall an iarratais san ateangaire PHP. Dá bhrí sin luann php.net mar bhearta idirthréimhseacha, i measc nithe eile, post_max_size = 8M (gan uaslódálacha) nó 32M (le huaslódálacha), upload_max_filesize faoina bhun, chomh maith le session.upload_progress.enabled=0. Is in php.ini, i linn FPM nó i gcumraíocht an fhreastalaí a bhaineann na luachanna seo, agus ina dhiaidh sin ní mór gach oibrí a atosú.

Molann údair theicniúla freisin iarratais multipart/form-data a bhlocáil ag an seachfhreastalaí nó sa WAF lasmuigh de chosáin uaslódála fíora. Is beart neamhoifigiúil é sin agus is é an riosca go mbristear foirmeacha; déanann an t-alt Iarratais uaslódála a scagadh ag an imeall cur síos ar an gcomhbhách. Ní thagann aon cheann de na bearta seo in ionad an nuashonraithe go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35.

Conas a chabhraíonn PHP SOS go praiticiúil?

  • Faighimid amach cé acu de do shuíomhanna gréasáin a dteastaíonn uaslódálacha uathu i ndáiríre agus ar cé na cosáin.
  • Socraímid na teorainneacha agus na bearta idirthréimhseacha do gach linn, atosaímid gach oibrí agus déanaimid tástáil ar na foirmeacha.
  • Seiceálaimid eolairí uaslódála le haghaidh comhad inrite agus cuirimid cosc ar rith scripteanna mar chuid de chruatú freastalaí.
  • Suiteálaimid an nuashonrú PHP agus déanaimid staid an phaistithe a dhoiciméadú do gach suíomh gréasáin.

Ceisteanna coitianta

Cá stórálann PHP comhaid uaslódáilte ar dtús?

I eolaire sealadach. De réir réamhshocraithe is é sin eolaire sealadach an chórais; is féidir é a athrú le upload_tmp_dir. Mura n-aistrítear an comhad sa script, scriosann PHP é ag deireadh an iarratais.

An bhfuil muinín agam as an réimse type i $_FILES?

Níl. Is é an brabhsálaí a thuairiscíonn an cineál MIME, agus de réir an lámhleabhair ní sheiceálann PHP é. Is ón seoltóir freisin a thagann name agus full_path. Faigh amach an cineál comhaid iarbhír ar an taobh freastalaí, ar bhonn an ábhair.

Cén fáth a bhfuil $_FILES folamh cé gur seoladh comhad?

Is dócha go raibh an t-iarratas iomlán níos mó ná post_max_size. Ansin folmhaíonn PHP $_POST agus $_FILES go hiomlán, gan cód earráide san eagar. Is cúiseanna eile iad enctype in easnamh sa fhoirm nó file_uploads a bheith múchta.

An gcabhraíonn sé i gcoinne PHP2Shell uaslódálacha a thoirmeasc sa fheidhmchlár?

Ní chabhraíonn. Tarlaíonn próiseáil shonraí an iarratais i PHP sula ritheann cód an fheidhmchláir. Is éifeachtach an nuashonrú PHP agus atosú gach oibrí; ní bheart idirthréimhseach iad teorainneacha níos docht ach sin amháin.

Cad é an difríocht idir upload_max_filesize agus post_max_size?

Cuireann upload_max_filesize teorainn le gach comhad ar leith, post_max_size le hábhar iomlán an iarratais, gach comhad agus réimse san áireamh. Dá bhrí sin ní mór post_max_size a bheith níos mó ná upload_max_filesize.

Foinsí

Teagmháil láithreach

Cuireann gach uair an chloig leis. Scríobh chugainn anois.

Déan cur síos gearr ar an gcóras, leagan PHP agus an rud a thug tú faoi deara. Cuirfimid scéala chugat, soiléireoimid an cás agus oibreoimid go cianda go dtí go mbeidh an teagmhas dúnta agus doiciméadaithe.

Cabhair láithreach