# Evita Server-Side Request Forgery (SSRF) f'PHP

> Evita SSRF f'PHP: listi ta' permess, biss HTTPS, l-ebda redirects, ivverifika l-IP riżolut u illimita t-traffiku ħerġin. Bi kodiċi cURL.

Sors: https://phpsos.de/mt/blog/ssrf-in-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:** SSRF f'PHP tevitawh billi l-applikazzjoni tagħkom titlob biss indirizzi li jinsabu fuq lista fissa ta' permess, esklussivament permezz ta' HTTPS, mingħajr ma ssegwi redirects. L-indirizz IP riżolut jiġi vverifikat kontra firxiet privati u riżervati u mbagħad jinżamm għall-konnessjoni. Firewall għat-traffiku ħerġin tiżgura li sistemi interni jibqgħu mhux aċċessibbli anke jekk ikun hemm żball fil-kodiċi.

## Meta s-server proprju jagħmel talbiet għal barranin

Previews ta' links f'chat, importazzjoni ta' immaġini ta' prodott permezz ta' URL, webhooks lejn sistemi ta' sħab, feed reader fis-CMS: ħafna applikazzjonijiet PHP jitolbu indirizzi li utent indika. Din hija funzjoni utli u fl-istess ħin bieb lejn ġewwa.

Fil-każ ta' Server-Side Request Forgery, fil-qosor SSRF, attakkant iġiegħel lill-applikazzjoni tibgħat talba lejn mira li hu jagħżel. L-għajb: it-talba tiġi mis-server innifsu. B'hekk tilħaq sistemi li huma mblukkati mill-barra, bħal databases, interfaces ta' amministrazzjoni fin-netwerk intern, servizzi li jisimgħu biss fuq localhost, jew is-servizzi ta' metadata tal-fornituri tal-cloud.

Fl-OWASP Top 10 tal-2021 SSRF kienet kategorija għaliha. F'proġetti PHP il-vulnerabbiltà ħafna drabi tidher fejn xi ħadd mgħaġġel bena funzjoni „żid immaġni b'URL“.

## SSRF f'PHP: liema funzjonijiet jitolbu indirizzi

Mhux biss cURL jitlob indirizzi. Dawn il-postijiet għandkom iżommu f'moħħkom:

| Funzjoni jew qasam | Għaliex rilevanti |
|---|---|
| cURL (`curl_exec()`) | l-aktar mod frekwenti, ħafna protokolli possibbli |
| `file_get_contents()`, `fopen()`, `copy()` b'URL | jużaw URL wrappers meta `allow_url_fopen` ikun attiv |
| `getimagesize()` u libreriji tal-immaġini | jistgħu jgħabbu fajls mill-bogħod |
| Ipproċessar ta' XML, klijenti SOAP | f'ċerti ċirkostanzi jgħabbu riżorsi esterni |
| Libreriji HTTP bħal Guzzle | jibnu fuq cURL jew streams, l-istess regoli |

Jekk l-applikazzjoni tagħkom m'għandhiex bżonn tiftaħ fajls mill-bogħod permezz ta' funzjonijiet tal-fajls, itfu `allow_url_fopen` fuq in-naħa tas-server. Suġġett relatat, l-inklużjoni ta' fajls permezz ta' mogħdijiet mit-talba, jittrattah il-gwida [Evita Local u Remote File Inclusion](https://phpsos.de/mt/ratgeber/lfi-rfi/).

## Id-difiża fi ħames passi

OWASP jirrakkomanda taħlita ta' miżuri li waħedhom kull waħda tista' tiġi evitata, imma flimkien iżommu:

1. **Lista ta' permess minflok URL ħieles:** L-aħjar li l-utent jagħżel biss minn miri magħrufa, jew jindika biss identifikatur, u l-applikazzjoni tibni l-indirizz hi stess.
2. **Ippermettu biss HTTPS:** Eskludu protokolli oħra bħal `file`, `gopher` jew `ftp` f'cURL, anke għal redirects.
3. **Issegwux redirects:** Indirizz permess jista' inkella jibgħat lejn mira interna.
4. **Ivverifikaw u żommu l-indirizz riżolut:** Irriżolvu l-hostname, ivverifikaw l-IP kontra firxiet privati, loopback u link-local u uża eżattament dan l-IP għall-konnessjoni. Inkella riżoluzzjoni DNS tat-tieni darba tista' tagħti mira differenti.
5. **Illimitaw in-netwerk:** Is-server tal-web jista' jilħaq mill-barra biss il-miri li jeħtieġ.

## Mudell sigur b'cURL

L-eżempju li ġej japplika l-passi 1 sa 4 għal IPv4. Hostnames u fluss huma eżempji; għal IPv6 japplikaw l-istess verifiki.

```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;
}
```

Xi dettalji huma importanti. `gethostbyname()` f'każ ta' żball jirritorna l-hostname; il-verifika sussegwenti tal-IP taqbad dan. Il-flags `FILTER_FLAG_NO_PRIV_RANGE` u `FILTER_FLAG_NO_RES_RANGE` jeskludu, skont il-manwal ta' PHP, fost oħrajn il-firxiet 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 u 169.254.0.0/16. Minn PHP 8.2 hemm ukoll `FILTER_FLAG_GLOBAL_RANGE`, li jippermetti biss indirizzi validi globalment. `CURLOPT_RESOLVE` jiżgura li cURL juża eżattament l-indirizz vverifikat, filwaqt li l-hostname u l-verifika taċ-ċertifikat jinżammu.

Żewġ punti oħra jillimitaw dak li attakkant jitgħallem minn vulnerabbiltà SSRF. Tirritornawx tweġibiet u messaġġi ta' żball tal-mira mitluba lill-utent mhux iffiltrati: anke d-distinzjoni bejn „konnessjoni rifjutata“ u „timeout“ turi liema servizzi interni jeżistu. U illimitaw il-ħin u d-daqs tat-tweġiba, biex il-funzjoni ma tkunx adattata biex tgħabbi żżejjed is-server proprju. Webhooks lejn indirizzi li l-klijenti stess jidħlu l-aħjar tibagħtuhom minn kju u mhux waqt it-talba li taħdem.

> **Importanti:**
> Jekk l-applikazzjoni tagħkom tassew trid titlob indirizzi arbitrarji, pereżempju għal previews tal-links, ibdlu din il-funzjoni għal servizz separat mingħajr aċċess għan-netwerk intern. Lista ta' permess mbagħad mhijiex possibbli, is-separazzjoni tan-netwerk hija aktar importanti.

## Il-livell tan-netwerk bħala xibka tas-sigurtà

Verifiki tal-kodiċi jistgħu jkollhom nuqqasijiet, pereżempju meta żewġ libreriji jaqsmu URL b'mod differenti. OWASP jagħti parir li inkonsistenzi bħal dawn jiġu trattati bħala rifjut u li jiġi llimitat ukoll fil-livell tan-netwerk. Server tal-web mill-barra ġeneralment jeħtieġ ftit miri: sorsi tal-pakketti, fornituri tal-ħlas u tal-konsenja, mail relay, ċerti interfaces.

Firewall għat-traffiku ħerġin jgħin darbtejn. Twaqqaf talbiet SSRF lejn in-netwerk intern, u wara dħul, pereżempju permezz ta' verżjoni mhux ippatchjata ta' PHP, tagħmel aktar diffiċli t-tagħbija ta' għodod ulterjuri. Kif tibnu r-regoli jiddeskrivi [Firewall għas-server tal-web: iftħu biss il-ports meħtieġa](https://phpsos.de/mt/blog/firewall-fuer-webserver/). Liema konnessjonijiet server jibni fil-fatt juri [Ivverifika l-konnessjonijiet ħerġin ta' server](https://phpsos.de/mt/blog/ausgehende-verbindungen-pruefen/).

F'ambjenti tal-cloud tappartjeni l-verżjoni sodda tas-servizz ta' metadata. OWASP għal AWS isemmi l-bidla għal IMDSv2 u l-itfi ta' IMDSv1.

## Sib SSRF fil-kodiċi eżistenti

Bidu mgħaġġel huwa t-tfittxija għal postijiet fejn funzjonijiet ta' talba jirċievu valuri mit-talba:

```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"
```

Il-hits huma ordnijiet ta' verifika. Partikolarment bir-reqqa għandkom tħarsu lejn funzjonijiet li l-admins jużaw: importazzjonijiet, issettjar ta' webhooks, verifiki tal-aġġornamenti tal-plugins.

Faċilment jiġu injorati l-ġeneraturi tal-PDF li jibdlu HTML b'immaġini jew stylesheets inkorporati f'dokumenti. Jekk parti minn dan l-HTML tiġi minn inputs tal-utent, pereżempju fil-fatturi b'logo li jintgħażel liberament, il-ġeneratur f'ċerti ċirkostanzi jitlob indirizzi li l-utent jiddetermina. Ivverifikaw hemmhekk l-issettjar għat-tagħbija ta' riżorsi mill-bogħod u itfuh jekk mhux meħtieġ.

## Kif tgħin PHP SOS b'mod konkret?

- Infittxu l-postijiet kollha fejn l-applikazzjoni tagħkom titlob indirizzi, anke fil-plugins u fil-libreriji.
- Nibnu funzjoni ċentrali ta' talba b'lista ta' permess, restrizzjoni tal-protokoll u verifika tal-IP.
- Niddefinixxu regoli għat-traffiku ħerġin u nipproteġu s-servizzi ta' metadata f'ambjenti tal-cloud.
- Nivverifikaw l-implimentazzjoni mill-barra u niddokumentaw il-miri permessi.

Verifika indipendenti tal-applikazzjoni tagħkom tiddeskriviha [Awditu tas-sigurtà u test ta' penetrazzjoni](https://phpsos.de/mt/leistungen/sicherheitsaudit-penetrationstest/).


## Mistoqsijiet frekwenti

**Liema funzjonijiet ta' PHP jistgħu jiġu abbużati għal SSRF?**  
Dawk kollha li jitolbu indirizz minn inputs tal-utent: cURL, file_get_contents u fopen b'URL wrappers, funzjonijiet tal-immaġini u tal-XML li jgħabbu fajls mill-bogħod, kif ukoll libreriji għal webhooks, feeds jew previews tal-links.

**Huwa biżżejjed li nibblokkaw indirizzi IP interni?**  
Waħdu le. OWASP jiddeskrivi listi ta' blokk bħala vulnerabbli għall-evitar u jirrakkomanda listi ta' permess. Barra minn hekk l-applikazzjoni trid tuża eżattament l-indirizz li vverifikat u ma għandhiex issegwi redirects.

**Għaliex SSRF huwa partikolarment kritiku fil-cloud?**  
Il-fornituri tal-cloud jagħtu lill-istanzi servizzi interni ta' metadata, li minnhom parzjalment jistgħu jinġiebu dettalji tal-aċċess. Jekk applikazzjoni tista' tibgħat talbiet hemmhekk, attakkant jista' jilħaq din id-data permezz tagħha. Il-fornituri joffru verżjonijiet sodi ta' dawn is-servizzi li għandhom ikunu attivati.

**X'jgħin firewall għat-traffiku ħerġin?**  
Tillimita liema miri s-server jista' jilħaq fl-ewwel lok. Anke jekk verifika fil-kodiċi tfalli, sistemi interni jibqgħu mhux aċċessibbli. Barra minn hekk, wara dħul tagħmel aktar diffiċli t-tagħbija ta' kodiċi malizzjuż u t-tnixxija tad-data.

## Sorsi

- [OWASP Server-Side Request Forgery Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html)
- [Manwal ta' PHP: kostanti tal-filtri](https://www.php.net/manual/de/filter.constants.php)
- [Manwal ta' PHP: kostanti ta' cURL](https://www.php.net/manual/de/curl.constants.php)
