# FrankenPHP aizsardzība

> FrankenPHP drošība pēc PHP2Shell: pārbaudiet iegulto PHP versiju, pārbūvējiet bināro failu vai image, pārstartējiet workerus un nostipriniet vērtības.

Avots: https://phpsos.de/lv/server/frankenphp/  
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:** FrankenPHP ir uz Caddy balstīts lietojumprogrammu serveris, kas PHP iegulda savā programmā. FrankenPHP drošībai pēc PHP2Shell tas nozīmē: svarīgas nav distributīva PHP pakotnes, bet PHP versija FrankenPHP bināraj failā vai konteinera image. Pārbūvējiet vai ielādējiet versiju ar labotu PHP un pārstartējiet visus worker.

## Kāpēc FrankenPHP ielāpo citādi

Klasiskos iestatījumos PHP kā pakotni piegādā distributīvs, un atjauninājums nomaina failus. FrankenPHP turpretī PHP satur kā iegultu bibliotēku. Kas izmanto oficiālo bināro failu vai uz tā balstītu konteinera image, saņem PHP komplektā. `apt upgrade` uz hosta to nemaina.

PHP2Shell ietver CVE-2026-109618 un CVE-2026-109619, katru ar CVSS v4.0 9.2. PHP projekts FrankenPHP skaidri min starp skartajiem darbības režīmiem. Labotas ir PHP 8.5.12, 8.4.27, 8.3.36 un 8.2.35. Izšķiroši ir tātad tas, ar kuru PHP versiju jūsu FrankenPHP ir būvēts.

## Worker režīms un PHP2Shell

FrankenPHP lietojumprogrammas var darbināt worker režīmā. Tad lietojumprogramma tiek ielādēta vienreiz un pēc tam vienā procesā apstrādā daudzus pieprasījumus pēc kārtas. Tas dod ātrumu, bet pagarina katra procesa mūžu.

CVE-2026-109619 apraksta pieprasījuma iekšējo stāvokli, kas pēc atmiņas atbrīvošanas var saglabāties; vēlāks pieprasījums tajā pašā worker to var izmantot, pirms tas tiek atiestatīts. Worker režīmā daudzu pieprasījumu mijiedarbība vienā procesā ir ierasta parādība. Tas nav iemesls atteikties no worker režīma, bet skaidrs iemesls atjauninājumus un pārstartēšanu veikt īpaši rūpīgi. Tehniskas detaļas atrodamas lapā [CVE-2026-109619](https://phpsos.de/lv/php2shell/cve-2026-109619/).

## FrankenPHP drošība: versijas pārbaude

Iegulto PHP versiju pārbaudiet tieši darbojošajā sistēmā. Turpmākās komandas tikai lasa; pakalpojumu un konteineru nosaukumi ir piemēri.

```bash
# Instalētais binārais fails
frankenphp version

# Darbojošajā konteinerā (konteinera nosaukums kā piemērs)
docker exec app frankenphp version
docker exec app php -v

# Kurš image patiešām darbojas? (Digest parāda precīzu stāvokli)
docker inspect --format '{{.Image}} {{.Config.Image}}' app
```

Pierakstiet PHP versiju no izvades. Ja tā ir pirms labotajiem stāvokļiem, sistēma ir ievainojama. Vienmēr pārbaudiet darbojošos konteineru, nevis tikai pēdējo izveidoto image, jo jaunais image iedarbojas tikai pēc konteineru nomaiņas.

## Atjauninājuma ieinstalēšana un visu worker pārstartēšana

Kā atjauninājums izskatās, ir atkarīgs no jūsu instalācijas:

- **Binārais fails uz hosta:** instalēt jaunu FrankenPHP laidienu ar labotu PHP versiju, pakalpojumu pārstartēt.
- **Konteineri:** iegūt bāzes image ar labotu PHP versiju, savu image pārbūvēt, bāzes slānim neizmantojot kešatmiņu, konteinerus nomainīt.
- **Pašu kompilēts:** pārbūvēt ar labotu PHP versiju, visus paplašinājumus izveidot no jauna ar to pašu versiju.

```bash
# Piemērs: instalācija uz hosta kā systemd pakalpojums
systemctl restart frankenphp

# Piemērs Docker Compose: pārbūvēt bez kešatmiņas un nomainīt konteinerus
docker compose build --pull --no-cache
docker compose up -d --force-recreate
```

Pēc tam vēlreiz pārbaudiet PHP versiju darbojošajā konteinerā un procesu startēšanas laiku. Worker režīmā katram worker jābūt pārstartētam. Kubernetes gadījumā ir papildu soļi, kas aprakstīti lapā [PHP ielāpošana Kubernetes](https://phpsos.de/lv/server/kubernetes/), konteineriem kopumā lapā [PHP ielāpošana Docker konteineros](https://phpsos.de/lv/php2shell/docker-container-patchen/).

> **Svarīgi:**
> Tags, piemēram, `latest`, vai galvenā versija image nosaukumā negarantē, ka jums ir jaunākais stāvoklis. Bāzes image ielādējiet aktīvi no jauna un pēc tam pārbaudiet PHP versiju darbojošajā konteinerā.

## Pagaidu pasākumi un nostiprināšana

Ja atjauninājumu nevar veikt nekavējoties, php.net iesaka pagaidu pasākumus, kas nesniedz pilnīgu aizsardzību. FrankenPHP vērtības iestatiet php.ini, ko ielādē FrankenPHP, vai ar PHP iestatījumiem Caddy konfigurācijā, nevis ar `ini_set()` lietojumprogrammā.

```ini
; php.ini konteinerā vai uz hosta
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
```

Ja ir augšupielādes funkcija, php.net min `post_max_size = 32M`. PHP 8.5 gadījumā klāt nāk `fatal_error_backtraces=0`. Atmiņas ierobežojums jāiestata konteinera līmenī, piemēram, ar konteinera atmiņas limitu, nevis ar `RLIMIT_AS` vai `RLIMIT_DATA`. Pēc katras izmaiņas pārstartējiet visus worker.

Ilgtermiņā ir vērts image atsaukties uz fiksētu digest, regulāri automatizēti pārbūvēt un būvēšanas ķēdē iekļaut image skeneri. Ielāps turklāt nenoņem ļaunprātīgu programmatūru, kas tika ievadīta iepriekš. Saglabājiet žurnālus no 2026. gada 20. oktobra; konteineru gadījumā tas nozīmē tos saglabāt pirms nomaiņas.

Kas FrankenPHP izmanto kā statiski būvētu bināro failu, tam jāzina, ka tur līdzās PHP cieši iebūvēti arī visi paplašinājumi. Tāpēc atjauninājums vienmēr nozīmē nomainīt visu bināro failu. Pēc nomaiņas pārbaudiet versiju un ielādēto paplašinājumu sarakstu, vai viss ir pieejams kā iepriekš, un pārbaudiet lietojumprogrammu, pirms veco stāvokli atmetat. Konteineru vidēs ieteicams katru image marķēt ar būvēšanas datumu. Tā jebkurā laikā varat izsekot, kurš stāvoklis kad darbojās, un šaubu gadījumā mērķtiecīgi atgriezties, vēlreiz neuzkrītot uz ievainojamu stāvokli. Image, PHP versijas un laika punkta piesaisti fiksējiet savā dokumentācijā.

## Kā PHP SOS palīdz konkrēti?

- Mēs pārbaudām, kura PHP versija patiešām atrodas jūsu FrankenPHP binārajos failos un darbojošajos konteineros.
- Ar [PHP ielāpu pakalpojumu](https://phpsos.de/lv/leistungen/php-patch-service/) mēs pārbūvējam image, nomainām konteinerus un pārstartējam visus worker, ar pierādījumu.
- Mēs saglabājam žurnālus pirms nomaiņas un pārbaudām lietojumprogrammu, vai tajā nav pēdu.
- Ilgtermiņa darbībai savas [servera nostiprināšanas](https://phpsos.de/lv/leistungen/server-haertung/) ietvaros mēs ieviešam automatizētas pārbūves un image pārbaudes.


## Biežāk uzdotie jautājumi

**Vai apt vai dnf atjauninājums FrankenPHP palīdz?**  
Tikai tad, ja pats FrankenPHP nāk no šiem pakotņu avotiem un ir būvēts ar ielāpoto PHP. Bieži PHP ir cieši iekļauts FrankenPHP binārajā failā vai konteinera image. Tad jāatjaunina binārais fails vai image.

**Kāpēc worker režīms PHP2Shell gadījumā ir īpaši svarīgs?**  
Worker režīmā lietojumprogramma paliek atmiņā un vienā procesā secīgi apstrādā daudzus pieprasījumus. CVE-2026-109619 skar tieši iekšējo stāvokli, kas starp pieprasījumiem tajā pašā worker var saglabāties. Tāpēc pēc atjauninājuma visu worker pārstartēšana ir obligāta.

**Kā pārbaudīt, kura PHP versija ir FrankenPHP?**  
FrankenPHP binārais fails, izsaucot versiju, izvada iegulto PHP versiju. Konteinerā šo komandu var izpildīt ar docker exec. Raugieties, lai versiju pārbaudītu patiešām darbojošā konteinerā, nevis jaunizveidotajā image.

**Vai FrankenPHP ir savi pagaidu pasākumi?**  
Spēkā ir vispārīgās php.net norādes. Vērtības iestatāt php.ini, ko ielādē FrankenPHP, vai Caddy faila PHP konfigurācijā, nevis ar ini_set() lietojumprogrammā. Pēc tam pārstartējiet visus worker.

## Avoti

- [php.net: drošības paziņojumi](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
