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 →

Server-Side Request Forgery (SSRF) a chosc i PHP

Conas a chuireann forbróirí cosc ar fheidhmchlár PHP córais inmheánacha a iarraidh ar son strainséirí: liostaí ceadaithe, srian prótacail, seoladh réitithe a sheiceáil agus teorainneacha sa líonra.

Staid Am léitheoireachta: 6 nóim.Forbairt shlán

Go achomair: Cuireann tú cosc ar SSRF i PHP trí gan seoltaí a ghlaoch óna d'fheidhmchlár ach iad siúd atá ar liosta ceadaithe seasta, trí HTTPS amháin, gan athsheolta a leanúint. Seiceáiltear an seoladh IP réitithe i gcoinne raonta príobháideacha agus curtha in áirithe agus ansin socraítear é don nasc. Cinntíonn balla dóiteáin do thrácht amach go bhfanann córais inmheánacha neamh-inrochtana fiú má tá earráid sa chód.

Nuair a dhéanann do fhreastalaí féin iarratais do strainséirí

Réamhamhairc nasc i gcomhrá, íomhá táirge a allmhairiú trí URL, webhooks chuig córais chomhpháirtithe, léitheoir fotha sa CMS: glaonn a lán feidhmchlár PHP seoltaí a thug úsáideoir. Is feidhm úsáideach é sin agus tá sé ina dhoras isteach san am céanna.

Le Server-Side Request Forgery, SSRF go hachomair, cuireann ionsaitheoir ar an bhfeidhmchlár iarratas a sheoladh chuig sprioc dá rogha. An chleas: tagann an t-iarratas ón bhfreastalaí féin. Mar sin sroicheann sé córais atá faoi ghlas ón taobh amuigh, mar shampla bunachair sonraí, comhéadain riaracháin sa líonra inmheánach, seirbhísí nach éisteann ach ar localhost, nó seirbhísí meiteashonraí soláthraithe scamall.

I OWASP Top 10 de 2021 bhí SSRF ina chatagóir ar leith. I dtionscadail PHP tagann an laige chun cinn go minic san áit ar thóg duine feidhm „íomhá a chur leis trí URL“ go tapa.

SSRF i PHP: cé na feidhmeanna a ghlaonn seoltaí

Ní ghlaonn cURL amháin seoltaí. Ba cheart duit na háiteanna seo a leanas a choimeád in aigne:

Feidhm nó réimse Cén fáth a bhfuil sé ábhartha
cURL (curl_exec()) an bealach is minice, go leor prótacal indéanta
file_get_contents(), fopen(), copy() le URL úsáideann siad URL wrappers nuair atá allow_url_fopen gníomhach
getimagesize() agus leabharlanna íomhá is féidir leo comhaid i bhfad i gcéin a luchtú
Próiseáil XML, cliaint SOAP luchtaíonn siad acmhainní seachtracha i gcúinsí áirithe
Leabharlanna HTTP ar nós Guzzle tógtha ar cURL nó ar shruthanna, na rialacha céanna

Mura gá d'fheidhmchláir comhaid i bhfad i gcéin a oscailt le feidhmeanna comhad, múch allow_url_fopen ar thaobh an fhreastalaí. Déanann an treoir Local agus Remote File Inclusion a chosc plé ar thopaic ghaolmhar, comhaid a chuimsiú trí chosáin ón iarratas.

An chosaint i gcúig chéim

Molann OWASP meascán de bhearta a d'fhéadfaí a sheachbhóthar ina n-aonar, ach a sheasann le chéile:

  1. Liosta ceadaithe in ionad URL saor: Is fearr nuair a roghnaíonn an t-úsáideoir ó spriocanna aitheanta amháin, nó nuair nach dtugann sé ach aitheantóir, agus go dtógann an feidhmchlár an seoladh féin.
  2. HTTPS amháin a cheadú: Prótacail eile ar nós file, gopher nó ftp a eisiamh i cURL, fiú d'athsheolta.
  3. Gan athsheolta a leanúint: Seachas sin is féidir le seoladh ceadaithe athsheoladh chuig sprioc inmheánach.
  4. An seoladh réitithe a sheiceáil agus a shocrú: An t-óstainm a réiteach, an IP a sheiceáil i gcoinne raonta príobháideacha, loopback agus link-local agus an IP sin go beacht a úsáid don nasc. Seachas sin is féidir le dara réiteach DNS sprioc eile a sholáthar.
  5. An líonra a theorannú: Ní fhéadfaidh an freastalaí gréasáin ach na spriocanna a bhfuil siad de dhíth air a shroicheadh amach.

Patrún slán le cURL

Cuireann an sampla seo a leanas céimeanna 1 go 4 i bhfeidhm d'IPv4. Is samplaí iad óstainmneacha agus sreabhadh; baineann na seiceálacha céanna le IPv6.

<?php
declare(strict_types=1);

function ladeVonPartner(string $url): string
{
    $teile = parse_url($url);
    if (!is_array($teile) || ($teile['scheme'] ?? '') !== 'https'
        || isset($teile['user']) || isset($teile['pass']) || isset($teile['port'])) {
        throw new InvalidArgumentException('Adresse nicht erlaubt.');
    }

    $host = strtolower($teile['host'] ?? '');
    $erlaubt = ['api.partner.example', 'bilder.partner.example'];
    if (!in_array($host, $erlaubt, true)) {
        throw new InvalidArgumentException('Ziel nicht erlaubt.');
    }

    $ip = gethostbyname($host);
    $oeffentlich = filter_var($ip, FILTER_VALIDATE_IP,
        FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
    if ($oeffentlich === false) {
        throw new RuntimeException('Ziel löst auf eine nicht erlaubte Adresse auf.');
    }

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_FOLLOWLOCATION  => false,
        CURLOPT_PROTOCOLS       => CURLPROTO_HTTPS,
        CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTPS,
        CURLOPT_RESOLVE         => [$host . ':443:' . $ip],
        CURLOPT_CONNECTTIMEOUT  => 3,
        CURLOPT_TIMEOUT         => 10,
    ]);
    $antwort = curl_exec($ch);
    if ($antwort === false) {
        throw new RuntimeException('Abruf fehlgeschlagen.');
    }
    return $antwort;
}

Tá roinnt mionsonraí tábhachtach. Tugann gethostbyname() an t-óstainm ar ais i gcás earráide; gabhann an tseiceáil IP ina dhiaidh sin é sin. Eisíonn na bratacha FILTER_FLAG_NO_PRIV_RANGE agus FILTER_FLAG_NO_RES_RANGE de réir lámhleabhar PHP, i measc eile, na raonta 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 agus 169.254.0.0/16. Ó PHP 8.2 tá FILTER_FLAG_GLOBAL_RANGE ann freisin, nach gceadaíonn ach seoltaí atá bailí go domhanda. Cinntíonn CURLOPT_RESOLVE go n-úsáideann cURL go beacht an seoladh seiceáilte, agus go gcoimeádtar an t-óstainm agus seiceáil an teastais.

Teorannaíonn dhá phointe eile an méid a fhoghlaimíonn ionsaitheoir ó laige SSRF. Ná tabhair freagraí agus teachtaireachtaí earráide na sprice a glaodh ar ais don úsáideoir gan scagadh: nochtann fiú an t-idirdhealú idir „nasc diúltaithe“ agus „am istigh“ cé na seirbhísí inmheánacha atá ann. Agus cuir teorainn le haga rite agus le méid an fhreagra ionas nach n-oireann an fheidhm do ró-ualú a chur ar do fhreastalaí féin. Is fearr webhooks chuig seoltaí a chuireann custaiméirí isteach iad féin a sheoladh ó scuaine agus ní le linn an iarratais atá ar siúl.

Tábhachtach

Má tá gá le d'fheidhmchlár seoltaí treallacha a ghlaoch i ndáiríre, mar shampla le haghaidh réamhamhairc nasc, aschumasaigh an fheidhm sin i seirbhís scartha gan rochtain ar an líonra inmheánach. Níl liosta ceadaithe indéanta ansin, agus is tábhachtaí an scaradh líonra dá bharr.

An leibhéal líonra mar líontán slándála

Is féidir go mbeidh bearnaí i seiceálacha cóid, mar shampla nuair a dhéanann dhá leabharlann URL a scoilt ar bhealach difriúil. Molann OWASP neamhréireachtaí den sórt sin a láimhseáil mar dhiúltú agus teorainn a chur ar leibhéal an líonra ina theannta sin. De ghnáth ní theastaíonn ó fhreastalaí gréasáin ach cúpla sprioc amach: foinsí pacáiste, soláthraithe íocaíochta agus seoltóireachta, athsheachadán ríomhphoist, comhéadain áirithe.

Cabhraíonn balla dóiteáin do thrácht amach faoi dhó. Stopann sé iarratais SSRF isteach sa líonra inmheánach, agus tar éis briseadh isteach, mar shampla trí leagan PHP gan phaiste, cuireann sé bac ar uirlisí eile a luchtú. Conas na rialacha a thógáil, déanann Balla dóiteáin d'fhreastalaí gréasáin: poirt riachtanacha amháin a oscailt cur síos air. Cé na naisc a bhunaíonn freastalaí i ndáiríre, léiríonn Naisc amach freastalaí a sheiceáil.

I dtimpeallachtaí scamall baineann an leagan cruaite den tseirbhís meiteashonraí leis. Luann OWASP don AWS an t-aistriú go IMDSv2 agus IMDSv1 a mhúchadh.

SSRF a rianú sa chód atá ann cheana

Tús tapa is ea cuardach a dhéanamh ar na háiteanna ina bhfaigheann feidhmeanna glaoite luachanna ón iarratas:

grep -rnE "(curl_init|file_get_contents|fopen|getimagesize|copy)\s*\(" src/ --include="*.php" | grep -E '\$_(GET|POST|REQUEST)|\$url'
grep -rn "CURLOPT_FOLLOWLOCATION" src/ --include="*.php"

Is tascanna seiceála iad na torthaí. Ba cheart duit breathnú go háirithe ar fheidhmeanna a úsáideann riarthóirí: allmhairithe, socruithe webhook, seiceálacha nuashonraithe forlíontán.

Is furasta gineadóirí PDF a fhágáil ar lár, a aistríonn HTML le híomhánna nó le bileoga stíle leabaithe ina ndoiciméid. Má thagann cuid den HTML sin ó ionchur úsáideora, mar shampla i sonraisc le lógó roghnaithe go saor, glaonn an gineadóir seoltaí a chinneann an t-úsáideoir i gcúinsí áirithe. Seiceáil na socruithe chun acmhainní i bhfad i gcéin a luchtú ansin agus múch é mura bhfuil sé de dhíth.

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

  • Aimsímid gach áit ina nglaonn d'fheidhmchlár seoltaí, i bhforlíontáin agus i leabharlanna freisin.
  • Tógaimid feidhm ghlaoite lárnach le liosta ceadaithe, srian prótacail agus seiceáil IP.
  • Socraímid rialacha do thrácht amach agus cosnaímid seirbhísí meiteashonraí i dtimpeallachtaí scamall.
  • Seiceálaimid an cur i bhfeidhm ón taobh amuigh agus doiciméadaímid spriocanna ceadaithe.

Déanann Iniúchadh slándála agus tástáil threáite cur síos ar sheiceáil neamhspleách ar d'fheidhmchlár.

Ceisteanna coitianta

Cé na feidhmeanna PHP is féidir a mhí-úsáid le haghaidh SSRF?

An chuid ar fad a ghlaonn seoladh ó ionchur úsáideora: cURL, file_get_contents agus fopen le URL wrappers, feidhmeanna íomhá agus XML a luchtaíonn comhaid i bhfad i gcéin, chomh maith le leabharlanna do webhooks, fothaí nó réamhamhairc nasc.

An leor seoltaí IP inmheánacha a bhlocáil?

Ní leor ina n-aonar. Deir OWASP go bhfuil liostaí blocála so-ghabhálach le seachbhóthar agus molann sé liostaí ceadaithe. Ina theannta sin ní mór don fheidhmchlár go beacht an seoladh seiceáilte a úsáid agus ní ceart dó athsheolta a leanúint.

Cén fáth a bhfuil SSRF thar a bheith criticiúil sa scamall?

Cuireann soláthraithe scamall seirbhísí meiteashonraí inmheánacha ar fáil do chásanna, ar a bhféadfar sonraí rochtana a fháil go páirteach. Má tá feidhmchlár in ann iarratais a sheoladh ansin, is féidir le hionsaitheoir na sonraí sin a bhaint amach tríd. Tairgeann na soláthraithe leaganacha cruaite de na seirbhísí seo, ar cheart iad a chur ar siúl.

Cad a thugann balla dóiteáin do thrácht amach?

Teorannaíonn sé cé na spriocanna is féidir leis an bhfreastalaí a shroicheadh ar chor ar bith. Fiú má theipeann ar sheiceáil sa chód, fanann córais inmheánacha neamh-inrochtana ansin. Ina theannta sin, tar éis briseadh isteach, cuireann sé bac ar chód mailíseach a luchtú agus ar shonraí a sceitheadh.

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