# Superglobālie mainīgie: $_GET, $_POST, $_FILES un citi

> PHP superglobālie mainīgie: kas ir $_GET, $_POST, $_FILES, $_SERVER u. c., kā PHP tos aizpilda pirms jūsu koda un kā droši izmantot pieprasījuma datus.

Avots: https://phpsos.de/lv/php/superglobals/  
Aktuāls uz: 25.10.2026  
Pakalpojuma sniedzējs: PHP SOS, PHP ārkārtas palīdzība un serveru drošība. Tūlītēja palīdzība pa WhatsApp: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20nepiecie%C5%A1ama%20pal%C4%ABdz%C4%ABba%20ar%20m%C5%ABsu%20PHP%20serveri.%20Uz%C5%86%C4%93mums%3A%20%E2%80%A6%20Vietne%3A%20%E2%80%A6

**Īsi:** Superglobālie mainīgie ir iepriekš definēti masīvi, ko PHP katrā pieprasījumā aizpilda automātiski un kas ir pieejami visur kodā. `$_GET` satur parametrus no adreses, `$_POST` veidlapu datus, `$_FILES` augšupielādētos failus, `$_COOKIE` sīkdatnes un `$_SERVER` ziņas par pieprasījumu un serveri. PHP šos masīvus izveido, pirms sākas jūsu lietojumprogrammas kods. Tāpēc ievainojamības tieši šajā apstrādē, kā PHP2Shell gadījumā, nevar notvert ar pārbaudēm lietojumprogrammā.

## Kas ir superglobālie mainīgie?

PHP mainīgais parasti ir spēkā tikai funkcijā, kurā tas izveidots. Superglobālie mainīgie ir izņēmums: tie ir pieejami katrā darbības apgabalā, nav jāņem ar `global`. PHP rokasgrāmata min deviņus no tiem.

Netehniķiem to var aprakstīt šādi: superglobālie mainīgie ir lietojumprogrammas pastkastīte. Viss, ko apmeklētājs sūta, nonāk tur, pirms lietojumprogramma to nolasa. Un viss pastkastītē potenciāli nāk no svešinieka.

## Superglobālie mainīgie pārskatā

| Superglobālais | Saturs | Izcelsme |
|---|---|---|
| `$_GET` | parametri no adreses (query string) | klients |
| `$_POST` | POST pieprasījuma veidlapas lauki | klients |
| `$_FILES` | ziņas par augšupielādētajiem failiem | klients, PHP sagatavots |
| `$_COOKIE` | pārlūkprogrammas līdzi nosūtītās sīkdatnes | klients |
| `$_REQUEST` | GET, POST un, iespējams, sīkdatņu maisījums | klients |
| `$_SERVER` | pieprasījuma galvenes, metode, ceļi, servera ziņas | tīmekļa serveris un klients jaukti |
| `$_ENV` | vides mainīgie | serveris |
| `$_SESSION` | pašreizējās sesijas dati | servera atmiņa |
| `$GLOBALS` | visi globālie mainīgie | skripts |

Īpaši salts ir `$_SERVER`. Saskaņā ar rokasgrāmatu PHP katrai pieprasījuma galvenei izveido ierakstu ar `HTTP_` sākumā, piemēram, `HTTP_USER_AGENT`. Šīs vērtības iestata pats klients. Arī `SERVER_NAME` saskaņā ar rokasgrāmatu var saturēt klienta piegādāto saimniekdatora nosaukumu un drošības lēmumiem nav uzticams.

## Kā PHP aizpilda superglobālos mainīgos

Pirms tiek izpildīta jūsu skripta pirmā rakstzīme, PHP jau ir strādājis. Tas nolasa adresi, galvenes un pieprasījuma saturu, sadala tos un rezultātus ievieto masīvos. Šo soli vada vairāki iestatījumi:

1. **`variables_order`** (noklusējums `EGPCS`) nosaka, kuri superglobālie mainīgie vispār tiek izveidoti: Environment, GET, POST, Cookie, Server.
2. **`request_order`** (noklusējums tukšs) nosaka, no kā tiek veidots `$_REQUEST`. Ja tas ir tukšs, ir spēkā `variables_order`. Komplektā iekļautie php.ini faili sīkdatnes saskaņā ar rokasgrāmatu drošības nolūkos izlaiž.
3. **`max_input_vars`** (noklusējums `1000`) un **`max_input_nesting_level`** (noklusējums `64`) ierobežo ievades mainīgo skaitu un ligzdošanu.
4. **`post_max_size`** (noklusējums `8M`) ierobežo pieprasījuma saturu. Ja pieprasījums ir lielāks, `$_POST` un `$_FILES` paliek tukši.
5. **`enable_post_data_reading`** (noklusējums ieslēgts) nosaka, vai PHP POST pieprasījumu saturu vispār apstrādā automātiski.

Ja `enable_post_data_reading` ir izslēgts, lietojumprogramma neapstrādāto saturu nolasa pati caur `php://input`. Kopš PHP 8.4.0 papildus ir `request_parse_body()`, kas veidlapu un augšupielādes datus apstrādā arī citām metodēm, ne tikai POST, un atļauj savas robežvērtības. Kā augšupielādes daļa norit detalizēti, izskaidro lapa [Kā PHP apstrādā failu augšupielādes](https://phpsos.de/lv/php/datei-uploads-intern/).

## Droša rīcība ar pieprasījuma datiem

Pamatprincips ir vienkāršs: katra vērtība no `$_GET`, `$_POST`, `$_COOKIE`, `$_FILES` un `$_SERVER` `HTTP_` ierakstiem ir sveša ievade. Tā tiek pārbaudīta pieņemšanas brīdī un izvadē atbilstoši maskēta.

```php
<?php
declare(strict_types=1);

// Sagaidāms vesels skaitlis: pārbaudīt, nevis akli pārveidot
$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');
}

// Atļaut tikai pieļaujamās vērtības
$sortierung = in_array($_GET['sort'] ?? '', ['name', 'datum'], true)
    ? $_GET['sort']
    : 'datum';

// Izvadi vienmēr maskēt
echo htmlspecialchars($_POST['kommentar'] ?? '', ENT_QUOTES, 'UTF-8');
```

Bieži šķērslis ir norādes par pieprasījuma izcelsmi. Ja pirms tīmekļa servera atrodas reverse proxy, slodzes līdzsvarotājs vai CDN, `$_SERVER['REMOTE_ADDR']` satur šī starpnieka adresi, nevis apmeklētāja adresi. Īstā adrese tad atrodas galvenē, piemēram, `X-Forwarded-For`, ko tomēr katrs klients var iestatīt pats. Lietojumprogramma šādas galvenes drīkst izvērtēt tikai tad, ja pieprasījums pierādāmi nāk no sava, zināma starpniekservera. Citādi bloķēšanu pēc IP adreses vai protokolus var viegli maldināt. Līdzīgi ir ar `HTTPS`: ja šifrēšana beidzas starpniekserverī, lietojumprogrammai skaidri jāzina, ka sākotnējais savienojums bija šifrēts.

Citus validācijas un filtrēšanas paraugus rāda raksts [Ievades validācija un filtrēšana PHP](https://phpsos.de/lv/blog/eingaben-validieren-php/). Sesijas datiem `$_SESSION` ir spēkā savi noteikumi; tie atrodami lapā [Sesijas un sīkdatnes PHP](https://phpsos.de/lv/php/sessions-und-cookies/).

## Superglobālie mainīgie un PHP2Shell: kas notiek pirms jūsu koda

Šeit ir saikne ar pašreizējo situāciju. [CVE-2026-109618](https://phpsos.de/lv/php2shell/cve-2026-109618/) apraksta, ka Out-of-Memory stāvoklis var pārtraukt PHP brīdī, kad pieprasījuma dati ir inicializēti tikai daļēji; pieprasījuma sakopšanas laikā nederīgi dati tad var tikt uzskatīti par derīgiem. CVE-2026-109619 gadījumā pieprasījuma iekšējais stāvoklis pēc atmiņas atbrīvošanas var saglabāties un to var izmantot vēlāks pieprasījums tajā pašā darbprocesā (worker).

Abas ievainojamības tātad atrodas apstrādē, ko PHP pats veic ap pieprasījumu, nevis lietojumprogrammas kodā. PHP komanda risku mod_php gadījumā vērtē visaugstāk; tur exploit tika demonstrēts, vēl pirms tiek izpildīts lietojumprogrammas kods. Neviens `filter_var()` un neviena pārbaude lietojumprogrammā to nevar novērst.

> **Rīkoties nekavējoties:**
> Obligāts ir atjauninājums uz PHP 8.5.12, 8.4.27, 8.3.36 vai 8.2.35 un visu PHP procesu pārstartēšana. php.net pagaidu pasākumi, piemēram, šaurākas robežas `post_max_size`, nav pilnīga aizsardzība.

## Kā PHP SOS palīdz konkrēti?

- Mēs katrai vietnei pārbaudām spēkā esošās pieprasījuma datu robežvērtības un iestatām tās atbilstoši lietojumprogrammai.
- Mēs ieviešam PHP atjauninājumu, pārstartējam visus darbprocesus un ielāpu stāvokli pierādām mūsu [PHP ielāpošanas pakalpojuma](https://phpsos.de/lv/leistungen/php-patch-service/) ietvaros.
- Mēs paštaisītus risinājumus pārbaudām uz to, vai vērtības no superglobālajiem mainīgajiem bez pārbaudes nonāk datubāzē, failu sistēmā vai izvadē.
- Mēs nodrošinām tīmekļa servera žurnālus no 2026. gada 20. oktobra, lai vēlāka izvērtēšana paliktu iespējama.


## Biežāk uzdotie jautājumi

**Cik superglobālo mainīgo ir PHP?**  
PHP rokasgrāmata min deviņus: $GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST un $_ENV. Tie ir pieejami katrā darbības apgabalā, arī funkcijās un metodēs.

**Vai vērtībām $_SERVER var uzticēties?**  
Tikai daļēji. Ieraksti, kas sākas ar HTTP_, nāk no klienta pieprasījuma galvenēm. Rokasgrāmata brīdina, piemēram, ka SERVER_NAME var atspoguļot klienta piegādāto saimniekdatora nosaukumu un drošības lēmumiem nav uzticams.

**Kāpēc $_POST dažreiz ir tukšs, kaut gan veidlapa tika nosūtīta?**  
Biežākais iemesls ir pieprasījums, kas lielāks par post_max_size. Tad $_POST un $_FILES saskaņā ar rokasgrāmatu paliek tukši. Uz to noved arī izslēgts iestatījums enable_post_data_reading.

**Vai $_REQUEST vajadzētu izmantot?**  
Labāk ne. $_REQUEST sajauc datus no dažādiem avotiem, un kurš avots uzvar, atkarīgs no request_order un variables_order. Vērtības lasiet mērķtiecīgi no $_GET vai $_POST.

## Avoti

- [PHP rokasgrāmata: superglobālie mainīgie](https://www.php.net/manual/de/language.variables.superglobals.php)
- [PHP rokasgrāmata: $_SERVER](https://www.php.net/manual/en/reserved.variables.server.php)
- [PHP rokasgrāmata: php.ini direktīvas](https://www.php.net/manual/de/ini.core.php)
- [PHP rokasgrāmata: request_parse_body](https://www.php.net/manual/en/function.request-parse-body.php)
