# Superglobali: $_GET, $_POST, $_FILES i ostali

> PHP superglobali objašnjeni: što stoji u $_GET, $_POST, $_FILES, $_SERVER i ostalima, kako ih PHP popunjava prije Vašeg koda i kako sigurno koristiti podatke zahtjeva.

Izvor: https://phpsos.de/hr/php/superglobals/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** Superglobali su unaprijed definirana polja koja PHP automatski popunjava pri svakom zahtjevu i koja su dostupna posvuda u kodu. `$_GET` sadrži parametre iz adrese, `$_POST` podatke obrasca, `$_FILES` učitane datoteke, `$_COOKIE` kolačiće, a `$_SERVER` podatke o zahtjevu i poslužitelju. PHP ta polja stvara prije nego što se pokrene kod Vaše aplikacije. Zato ranjivosti u upravo toj obradi, kao kod PHP2Shella, provjere u aplikaciji ne mogu presresti.

## Što su superglobali?

U PHP-u varijabla normalno vrijedi samo u funkciji u kojoj je stvorena. Superglobali su iznimka: dostupni su u svakom dosegu, a da ih se ne mora dohvaćati pomoću `global`. PHP priručnik navodi devet takvih.

Za netehničke osobe to se može opisati ovako: superglobali su poštanski sandučić aplikacije. Sve što posjetitelj pošalje, tamo završava prije nego što aplikacija to pročita. A sve u sandučiću potencijalno potječe od stranca.

## Superglobali ukratko

| Superglobal | Sadržaj | Podrijetlo |
|---|---|---|
| `$_GET` | parametri iz adrese (query string) | klijent |
| `$_POST` | polja obrasca POST zahtjeva | klijent |
| `$_FILES` | podaci o učitanim datotekama | klijent, obradio PHP |
| `$_COOKIE` | kolačići koje šalje preglednik | klijent |
| `$_REQUEST` | mješavina GET-a, POST-a i po potrebi kolačića | klijent |
| `$_SERVER` | zaglavlja zahtjeva, metoda, putanje, podaci o poslužitelju | web-poslužitelj i klijent pomiješano |
| `$_ENV` | varijable okoline | poslužitelj |
| `$_SESSION` | podaci trenutne sesije | memorija poslužitelja |
| `$GLOBALS` | sve globalne varijable | skripta |

Osobito je podmukao `$_SERVER`. Prema priručniku PHP za svako zaglavlje zahtjeva stvara unos koji počinje s `HTTP_`, na primjer `HTTP_USER_AGENT`. Te vrijednosti postavlja sam klijent. I `SERVER_NAME` prema priručniku može sadržavati naziv hosta koji je isporučio klijent i nije pouzdan za sigurnosne odluke.

## Kako PHP popunjava superglobale

Prije nego što se izvrši prvi znak Vaše skripte, PHP je već radio. Čita adresu, zaglavlja i sadržaj zahtjeva, rastavlja ih i rezultate sprema u polja. Taj korak upravlja nekoliko postavki:

1. **`variables_order`** (zadano `EGPCS`) određuje koji se superglobali uopće stvaraju: Environment, GET, POST, Cookie, Server.
2. **`request_order`** (zadano prazno) određuje od čega se gradi `$_REQUEST`. Ako je prazno, vrijedi `variables_order`. Isporučene php.ini datoteke prema priručniku iz sigurnosnih razloga izostavljaju kolačiće.
3. **`max_input_vars`** (zadano `1000`) i **`max_input_nesting_level`** (zadano `64`) ograničavaju broj i ugniježđenost ulaznih varijabli.
4. **`post_max_size`** (zadano `8M`) ograničava sadržaj zahtjeva. Ako je zahtjev veći, `$_POST` i `$_FILES` ostaju prazni.
5. **`enable_post_data_reading`** (zadano uključeno) određuje hoće li PHP sadržaj POST zahtjeva uopće automatski obrađivati.

Ako je `enable_post_data_reading` isključen, aplikacija sirovi sadržaj sama čita putem `php://input`. Od PHP-a 8.4.0 postoji dodatno `request_parse_body()`, koji podatke obrazaca i uploada obrađuje i za metode koje nisu POST te dopušta vlastite granične vrijednosti. Kako detaljno teče dio s uploadom, objašnjava stranica [Kako PHP obrađuje uploade datoteka](https://phpsos.de/hr/php/datei-uploads-intern/).

## Sigurno postupati s podacima zahtjeva

Načelo je jednostavno: svaka vrijednost iz `$_GET`, `$_POST`, `$_COOKIE`, `$_FILES` i `HTTP_` unosa iz `$_SERVER` tuđ je unos. Provjerava se pri prihvaćanju, a pri ispisu odgovarajuće escapea.

```php
<?php
declare(strict_types=1);

// Očekuje se cijeli broj: provjeriti umjesto slijepo pretvarati
$seite = filter_var($_GET['seite'] ?? '1', FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1, 'max_range' => 500],
]);
if ($seite === false) {
    http_response_code(400);
    exit('Ungültige Seitenzahl');
}

// Dopustiti samo dopuštene vrijednosti
$sortierung = in_array($_GET['sort'] ?? '', ['name', 'datum'], true)
    ? $_GET['sort']
    : 'datum';

// Ispis uvijek escapeati
echo htmlspecialchars($_POST['kommentar'] ?? '', ENT_QUOTES, 'UTF-8');
```

Čest je kamen spoticanja podatak o podrijetlu zahtjeva. Ako ispred web-poslužitelja stoji reverse proxy, load balancer ili CDN, `$_SERVER['REMOTE_ADDR']` sadrži adresu tog posrednika, a ne posjetitelja. Prava adresa tada stoji u zaglavlju poput `X-Forwarded-For`, koje ipak svaki klijent može postaviti sam. Aplikacija smije obrađivati takva zaglavlja samo ako zahtjev dokazano dolazi s vlastitog, poznatog proxyja. Inače se blokade prema IP adresi ili zapisnici lako mogu zavarati. Slično vrijedi za `HTTPS`: ako šifriranje završava na proxyju, aplikacija mora izričito znati da je izvorna veza bila šifrirana.

Dodatne uzorke za validaciju i filtriranje prikazuje članak [Validacija i filtriranje unosa u PHP-u](https://phpsos.de/hr/blog/eingaben-validieren-php/). Za podatke sesije u `$_SESSION` vrijede vlastita pravila; nalaze se na stranici [Sesije i kolačići u PHP-u](https://phpsos.de/hr/php/sessions-und-cookies/).

## Superglobali i PHP2Shell: što se događa prije Vašeg koda

Ovdje je veza s aktualnim stanjem. [CVE-2026-109618](https://phpsos.de/hr/php2shell/cve-2026-109618/) opisuje da stanje nedostatka memorije može prekinuti PHP dok su podaci zahtjeva tek djelomično inicijalizirani; pri čišćenju zahtjeva nevaljani se podaci tada mogu tretirati kao valjani. Kod CVE-2026-109619 unutarnje stanje zahtjeva može ostati sačuvano nakon oslobađanja memorije i iskoristiti ga kasniji zahtjev u istom workeru.

Obje ranjivosti dakle leže u obradi koju PHP sam obavlja oko zahtjeva, a ne u kodu aplikacije. PHP tim rizik kod mod_php-a ocjenjuje najvišim; tamo je pokazan exploit prije nego što se uopće izvrši kod aplikacije. Nikakav `filter_var()` ni provjera u aplikaciji to ne mogu spriječiti.

> **Djelujte odmah:**
> Obvezno je ažuriranje na PHP 8.5.12, 8.4.27, 8.3.36 ili 8.2.35 i ponovno pokretanje svih PHP procesa. Prijelazne mjere php.net-a, na primjer uže granice za `post_max_size`, nisu potpuna zaštita.

## Kako PHP SOS konkretno pomaže?

- Provjeravamo djelotvorne granične vrijednosti za podatke zahtjeva po web-stranici i postavljamo ih u skladu s aplikacijom.
- Instaliramo PHP ažuriranje, ponovno pokrećemo sve workere i dokazujemo razinu zakrpa u okviru naše [PHP Patch usluge](https://phpsos.de/hr/leistungen/php-patch-service/).
- Vlastiti razvoj provjeravamo dospijevaju li vrijednosti iz superglobala neprovjereno u bazu podataka, datotečni sustav ili ispis.
- Zapisnike web-poslužitelja osiguravamo od 20. 10. 2026. kako bi kasnija analiza ostala moguća.


## Česta pitanja

**Koliko superglobala postoji u PHP-u?**  
PHP priručnik navodi devet: $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST i $_ENV. Dostupni su u svakom dosegu, i u funkcijama i metodama.

**Jesu li vrijednosti u $_SERVER pouzdane?**  
Samo djelomično. Unosi koji počinju s HTTP_ potječu iz zaglavlja zahtjeva klijenta. Priručnik upozorava, na primjer, da SERVER_NAME može odražavati naziv hosta koji je isporučio klijent i da nije pouzdan za sigurnosne odluke.

**Zašto je $_POST ponekad prazan iako je obrazac poslan?**  
Najčešći uzrok je zahtjev veći od post_max_size. Tada $_POST i $_FILES prema priručniku ostaju prazni. Do toga dovodi i isključena postavka enable_post_data_reading.

**Treba li koristiti $_REQUEST?**  
Bolje ne. $_REQUEST miješa podatke iz različitih izvora, a koji izvor pobjeđuje, ovisi o request_order i variables_order. Vrijednosti čitajte ciljano iz $_GET ili $_POST.

## Izvori

- [PHP priručnik: Superglobali](https://www.php.net/manual/de/language.variables.superglobals.php)
- [PHP priručnik: $_SERVER](https://www.php.net/manual/en/reserved.variables.server.php)
- [PHP priručnik: php.ini direktive](https://www.php.net/manual/de/ini.core.php)
- [PHP priručnik: request_parse_body](https://www.php.net/manual/en/function.request-parse-body.php)
