# Superglobaalid: $_GET, $_POST, $_FILES jt

> PHP superglobaalid selgitatud: mis on $_GET, $_POST, $_FILES, $_SERVER jt sees, kuidas PHP neid enne teie koodi täidab ja kuidas päringuandmeid turvaliselt kasutada.

Allikas: https://phpsos.de/et/php/superglobals/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** Superglobaalid on eelnevalt määratletud massiivid, mida PHP igal päringul automaatselt täidab ja mis on koodis kõikjal kättesaadavad. `$_GET` sisaldab aadressi parameetreid, `$_POST` vormiandmeid, `$_FILES` üleslaaditud faile, `$_COOKIE` küpsiseid ja `$_SERVER` andmeid päringu ja serveri kohta. PHP loob need massiivid enne, kui teie rakenduse kood käivitub. Seetõttu ei saa just selles töötluses olevaid auke, nagu PHP2Shelli puhul, rakenduses olevate kontrollidega kinni püüda.

## Mis on superglobaalid?

PHP-s kehtib muutuja tavaliselt ainult funktsioonis, kus see loodi. Superglobaalid on erand: need on kättesaadavad igas kehtivuspiirkonnas, ilma et neid oleks vaja `global` abil tuua. PHP käsiraamat nimetab neid üheksa.

Mitte-tehnikutele saab seda kirjeldada nii: superglobaalid on rakenduse postkast. Kõik, mida külastaja saadab, jõuab sinna enne, kui rakendus seda loeb. Ja kõik postkastis olev pärineb potentsiaalselt võõralt.

## Superglobaalid ülevaatlikult

| Superglobaal | Sisu | Päritolu |
|---|---|---|
| `$_GET` | aadressi parameetrid (query string) | klient |
| `$_POST` | POST-päringu vormiväljad | klient |
| `$_FILES` | andmed üleslaaditud failide kohta | klient, PHP poolt ette valmistatud |
| `$_COOKIE` | brauseri kaasa saadetud küpsised | klient |
| `$_REQUEST` | GET-i, POST-i ja vajadusel küpsiste segu | klient |
| `$_SERVER` | päringupäised, meetod, teed, serveri andmed | veebiserver ja klient segamini |
| `$_ENV` | keskkonnamuutujad | server |
| `$_SESSION` | praeguse sessiooni andmed | serveri mälu |
| `$GLOBALS` | kõik globaalsed muutujad | skript |

Eriti salakaval on `$_SERVER`. Käsiraamatu järgi loob PHP iga päringupäise jaoks kirje, mille algus on `HTTP_`, näiteks `HTTP_USER_AGENT`. Need väärtused seab klient ise. Ka `SERVER_NAME` võib käsiraamatu järgi sisaldada kliendi antud hostinime ja ei ole turvaotsuste jaoks usaldusväärne.

## Kuidas PHP superglobaale täidab

Enne kui teie skripti esimene märk täidetakse, on PHP juba töötanud. See loeb aadressi, päised ja päringu sisu, jaotab need ja paneb tulemused massiividesse. Seda sammu juhivad mitu sätet:

1. **`variables_order`** (vaikeväärtus `EGPCS`) määrab, millised superglobaalid üldse luuakse: Environment, GET, POST, Cookie, Server.
2. **`request_order`** (vaikeväärtus tühi) määrab, millest `$_REQUEST` moodustatakse. Kui see on tühi, kehtib `variables_order`. Kaasa antud php.ini failid jätavad küpsised käsiraamatu järgi turvakaalutlustel välja.
3. **`max_input_vars`** (vaikeväärtus `1000`) ja **`max_input_nesting_level`** (vaikeväärtus `64`) piiravad sisendmuutujate arvu ja pesastust.
4. **`post_max_size`** (vaikeväärtus `8M`) piirab päringu sisu. Kui päring on suurem, jäävad `$_POST` ja `$_FILES` tühjaks.
5. **`enable_post_data_reading`** (vaikeväärtus sees) juhib, kas PHP POST-päringute sisu üldse automaatselt töötleb.

Kui `enable_post_data_reading` on välja lülitatud, loeb rakendus toore sisu ise `php://input` kaudu. Alates PHP 8.4.0-st on lisaks `request_parse_body()`, mis töötleb vorme ja üleslaaditud andmeid ka muude meetodite kui POST puhul ning lubab oma piirväärtusi. Kuidas üleslaadimise osa üksikasjades toimub, selgitab leht [Kuidas PHP failide üleslaadimist töötleb](https://phpsos.de/et/php/datei-uploads-intern/).

## Päringuandmetega turvaliselt ümber käia

Põhimõte on lihtne: iga väärtus `$_GET`, `$_POST`, `$_COOKIE`, `$_FILES` ja `$_SERVER` kirjetest `HTTP_` on võõras sisend. See kontrollitakse vastuvõtul ja maskeeritakse väljundis sobivalt.

```php
<?php
declare(strict_types=1);

// Oodatakse täisarvu: kontrolli, mitte pimesi teisenda
$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');
}

// Luba ainult lubatud väärtused
$sortierung = in_array($_GET['sort'] ?? '', ['name', 'datum'], true)
    ? $_GET['sort']
    : 'datum';

// Väljund alati maskeerida
echo htmlspecialchars($_POST['kommentar'] ?? '', ENT_QUOTES, 'UTF-8');
```

Sage komistuskivi on andmed päringu päritolu kohta. Kui veebiserveri ees on pöördpuhverserver, koormusjaotur või CDN, sisaldab `$_SERVER['REMOTE_ADDR']` selle vahendaja aadressi, mitte külastaja oma. Tegelik aadress on siis päises nagu `X-Forwarded-For`, mille aga iga klient saab ise seada. Rakendus tohib selliseid päiseid töödelda ainult siis, kui päring tuleb tõendatult oma, tuntud puhverserverilt. Muidu saab IP-aadressi põhiseid blokeeringuid või logisid hõlpsasti petta. Sarnast kehtib `HTTPS` kohta: kui krüpteerimine lõpeb puhverserveris, peab rakendus selgesõnaliselt teadma, et algne ühendus oli krüpteeritud.

Teisi valideerimise ja filtreerimise mustreid näitab artikkel [Sisendite valideerimine ja filtreerimine PHP-s](https://phpsos.de/et/blog/eingaben-validieren-php/). Sessiooniandmete jaoks `$_SESSION` kehtivad omad reeglid; need on lehel [Sessioonid ja küpsised PHP-s](https://phpsos.de/et/php/sessions-und-cookies/).

## Superglobaalid ja PHP2Shell: mis toimub enne teie koodi

Siin asub seos praeguse olukorraga. [CVE-2026-109618](https://phpsos.de/et/php2shell/cve-2026-109618/) kirjeldab, et Out-of-Memory olukord võib PHP töö katkestada ajal, mil päringuandmed on alles osaliselt lähtestatud; päringu koristamisel võidakse kehtetuid andmeid siis käsitleda kehtivatena. CVE-2026-109619 puhul võib päringu sisemine olek pärast mälu vabastamist alles jääda ja seda võib kasutada hilisem päring samas workeris.

Mõlemad augud asuvad seega töötluses, mida PHP ise päringu ümber teeb, mitte rakenduse koodis. PHP meeskond hindab riski mod_php puhul kõige suuremaks; seal näidati ekspluateerimist enne, kui rakenduse kood üldse käivitub. Ükski `filter_var()` ega rakenduses olev kontroll ei saa seda takistada.

> **Tegutsege kohe:**
> Kohustuslik on uuendus versioonile PHP 8.5.12, 8.4.27, 8.3.36 või 8.2.35 ja kõigi PHP protsesside taaskäivitus. php.net-i ajutised meetmed, näiteks kitsamad piirid `post_max_size` jaoks, ei ole täielik kaitse.

## Kuidas PHP SOS konkreetselt aitab?

- Kontrollime veebisaidi kohta päringuandmete mõjusaid piirväärtusi ja seame need rakendusega sobivaks.
- Paigaldame PHP uuenduse, käivitame kõik workerid uuesti ja tõendame paikaseisu meie [PHP paigateenuse](https://phpsos.de/et/leistungen/php-patch-service/) raames.
- Kontrollime oma arendusi selle suhtes, kas superglobaalide väärtused jõuavad kontrollimata andmebaasi, failisüsteemi või väljundisse.
- Kindlustame veebiserveri logid alates 20.10.2026, et hilisem hindamine jääks võimalikuks.


## Korduma kippuvad küsimused

**Mitu superglobaali PHP-s on?**  
PHP käsiraamat nimetab üheksa: $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST ja $_ENV. Need on kättesaadavad igas kehtivuspiirkonnas, ka funktsioonides ja meetodites.

**Kas $_SERVER väärtused on usaldusväärsed?**  
Ainult osaliselt. Kirjed, mis algavad HTTP_, pärinevad kliendi päringupäistest. Käsiraamat hoiatab näiteks, et SERVER_NAME võib kajastada kliendi antud hostinime ega ole turvaotsuste jaoks usaldusväärne.

**Miks $_POST on vahel tühi, kuigi vorm saadeti?**  
Kõige sagedasem põhjus on päring, mis on suurem kui post_max_size. Siis jäävad $_POST ja $_FILES käsiraamatu järgi tühjaks. Sama tulemuse annab ka väljalülitatud säte enable_post_data_reading.

**Kas $_REQUEST'i peaks kasutama?**  
Parem mitte. $_REQUEST segab andmeid erinevatest allikatest ja milline allikas võidab, sõltub sätetest request_order ja variables_order. Lugege väärtusi sihipäraselt kas $_GET või $_POST kaudu.

## Allikad

- [PHP käsiraamat: superglobaalid](https://www.php.net/manual/de/language.variables.superglobals.php)
- [PHP käsiraamat: $_SERVER](https://www.php.net/manual/en/reserved.variables.server.php)
- [PHP käsiraamat: php.ini direktiivid](https://www.php.net/manual/de/ini.core.php)
- [PHP käsiraamat: request_parse_body](https://www.php.net/manual/en/function.request-parse-body.php)
