# Server-Side Request Forgery (SSRF) a chosc i PHP

> SSRF i PHP a chosc: liostaí ceadaithe, HTTPS amháin, gan athsheolta, seoladh IP réitithe a sheiceáil agus trácht amach a theorannú. Le cód cURL.

Foinse: https://phpsos.de/ga/blog/ssrf-in-php/  
Staid: 25/10/2026  
Soláthraí: PHP SOS, Cabhair éigeandála PHP agus slándáil freastalaí. Cabhair láithreach trí WhatsApp: https://wa.me/491736494914?text=Dia%20duit%2C%20a%20PHP%20SOS%2C%20t%C3%A1%20cabhair%20de%20dh%C3%ADth%20orainn%20len%C3%A1r%20bhfreastala%C3%AD%20PHP.%20Cuideachta%3A%20%E2%80%A6%20Su%C3%ADomh%20gr%C3%A9as%C3%A1in%3A%20%E2%80%A6

**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](https://phpsos.de/ga/ratgeber/lfi-rfi/) 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
<?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](https://phpsos.de/ga/blog/firewall-fuer-webserver/) cur síos air. Cé na naisc a bhunaíonn freastalaí i ndáiríre, léiríonn [Naisc amach freastalaí a sheiceáil](https://phpsos.de/ga/blog/ausgehende-verbindungen-pruefen/).

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:

```bash
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](https://phpsos.de/ga/leistungen/sicherheitsaudit-penetrationstest/) 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í

- [OWASP Server-Side Request Forgery Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html)
- [Lámhleabhar PHP: tairisigh scagaire](https://www.php.net/manual/de/filter.constants.php)
- [Lámhleabhar PHP: tairisigh cURL](https://www.php.net/manual/de/curl.constants.php)
