Trumpai: PHP karkasas (framework) yra pakartotinai naudojamo kodo pagrindas, kuris jau išsprendžia tipines žiniatinklio programos užduotis: nukreipia užklausas į tinkamą kodą, apdoroja formų duomenis, kreipiasi į duomenų bazes, kuria išvestį. Žinomi PHP karkasai yra Laravel, Symfony, Laminas, CodeIgniter, Yii, CakePHP ir Slim. Karkasas turi saugumo elementų, bet neapsaugo nuo spragų PHP interpretatoriuje, tokių kaip PHP2Shell.
Kas yra PHP karkasas?
Be karkaso kiekviena komanda iš naujo rašo maršrutizavimą, formų tikrinimą, sesijas ir klaidų tvarkymą. Karkasas tam nustato fiksuotas dalis ir konvencijas. Tai taupo laiką, daro kodą skaitomą naujiems kūrėjams ir saugumo funkcijas sutelkia vienoje vietoje, užuot jas paskirsčius šimtuose failų.
Vadovybei svarbiausia viena pasekmė: pasirinkdami karkasą, keleriems metams susisiejate su jo leidimų ciklu. Jei karkasas nebepalaiko PHP versijos arba pats nebeprižiūrimas, kiekvienas atnaujinimas pabrangsta.
Dauguma šiuolaikinių karkasų diegiami per Composer ir laikosi PHP-FIG standartų, pavyzdžiui, PSR-4 automatiniam įkėlimui ar PSR-7 HTTP pranešimams.
Žinomų PHP karkasų palyginimas
Toliau pateikta apžvalga naudoja projektų savęs aprašymus jų pradžios puslapiuose. Vertinimus pagal populiarumą ar rinkos dalį sąmoningai praleidžiame, nes tam nėra patikimo bendro šaltinio.
| Karkasas | Savęs aprašymas (pagal prasmę) | Tipinis naudojimas |
|---|---|---|
| Laravel | karkasas „su baterijomis“ žiniatinklio programoms | individualūs sprendimai, portalai, SaaS |
| Symfony | galingas karkasas su pakartotinai naudojamais komponentais | didelės, ilgaamžės programos; komponentai kituose projektuose |
| Laminas | bendruomenės prižiūrimas Zend Framework tęsinys | įmonių programos, tarpinė programinė įranga |
| CodeIgniter | mažas karkasas su stipriomis funkcijomis | mažesnės programos, žemas įėjimo slenkstis |
| Yii | karkasas greitam šiuolaikinių programų kūrimui | žiniatinklio programos, atskirų CMS pagrindas |
| CakePHP | karkasas su aiškiomis MVC konvencijomis | klasikinės duomenų bazių programos |
| Slim | mikrokarkasas žiniatinklio programoms ir API | lieknos API, tarpinės programinės įrangos paslaugos |
Symfony savo pradžios puslapyje kaip projektus, naudojančius Symfony komponentus, nurodo Drupal, Laravel, API Platform ir Composer. Taigi karkasas dažnai slypi ir ten, kur jo tiesiogiai nematyti. Kaip tai atrodo CMS ir parduotuvėse, rodo puslapis CMS ir parduotuvių sistemos PHP pagrindu.
Bendros beveik visų karkasų dalys
Nepaisant skirtingos filosofijos, dauguma karkasų turi panašią sandarą. Visos užklausos eina per vieną įėjimo tašką, priekinį valdiklį (front controller), dažniausiai public/index.php. Žiniatinklio serveris jam perduoda kiekvieną adresą, kuriam nėra tikro failo.
# Pavyzdys: Nginx nežinomus kelius nukreipia į priekinį valdiklį
root /var/www/app/public;
location / {
try_files $uri /index.php$is_args$args;
}
Apache atveju šią užduotį dažniausiai atlieka perrašymo taisyklė viešame aplanke, kituose žiniatinklio serveriuose panaši taisyklė. Visais atvejais svarbu, kad žiniatinklio serveris rodytų į aplanką public, o ne į pagrindinį projekto katalogą. Neteisingai nustatytas dokumentų katalogas yra viena dažniausių priežasčių, kodėl konfigūracijos failai staiga tampa viešai pasiekiami.
Privalumas saugumui: žiniatinklio šaknyje yra tik aplankas public. Konfigūracija, pirminis kodas ir vendor yra vienu lygiu aukščiau ir per URL nepasiekiami. Po to maršrutizatorius priskiria valdiklį (controller), tarpinė programinė įranga tikrina prisijungimą ar CSRF žetoną, o šablonų variklis kuria išvestį su automatiniu simbolių pakeitimu (escaping).
Kaip pasirinkti karkasą?
Naujai kūrybai ar esamo projekto perėmimui padeda šie klausimai:
- Priežiūra ir leidimų ciklas: kiek laiko versijos gauna saugumo atnaujinimus ir ar yra versijų su pratęstu palaikymu?
- PHP palaikymas: ar naudojama karkaso versija veikia su PHP versija, kuri pati dar gauna saugumo atnaujinimus? Tai nurodyta projekto reikalavimuose.
- Komanda ir paslaugų teikėjas: ar komanda pažįsta karkasą ir ar nelaimės atveju rasite jo specialistų?
- Ekosistema: ar yra prižiūrimų paketų jūsų poreikiams, ar daug reikėtų kurti patiems?
- Standartai: jei karkasas laikosi PSR sąsajų, dalis vėliau lengviau pakeičiamos.
Laravel ir Symfony projektams turime atskirus apsaugos puslapius: Laravel programų apsauga ir Symfony programų apsauga.
Ką karkasas duoda saugumui ir ko neduoda
Karkasai kūrėjams nuima daug klaidų šaltinių: parengtos duomenų bazės užklausos nuo SQL injekcijos, automatinis simbolių pakeitimas nuo Cross-Site Scripting, CSRF apsauga formoms, saugūs slaptažodžių maišos. Tačiau tai veikia tik tada, kai komanda šias dalis naudoja, o ne apeina.
Nuo PHP2Shell visa tai nepadeda. CVE-2026-109618 ir CVE-2026-109619 yra PHP interpretatoriuje. PHP komanda didžiausią riziką priskiria mod_php; ten parodytas exploit dar prieš pradedant vykdyti programos kodą. Taigi karkasas iš viso nepasiekia eilės. Padeda tik atnaujinimas iki PHP 8.5.12, 8.4.27, 8.3.36 ar 8.2.35 ir visų PHP procesų paleidimas iš naujo.
Karkaso atnaujinimas ir PHP atnaujinimas yra dvi atskiros užduotys. Abi priklauso priežiūrai, bet PHP2Shell uždaro tik PHP atnaujinimas.
Senesniuose projektuose atsiranda dar viena rizika: jei programa užstrigusi prie senos karkaso versijos, dažnai ji užstrigusi ir prie senos PHP versijos. PHP 8.1 ir senesnėms PHP projektas oficialių atnaujinimų nebeteikia.
Kaip PHP SOS padeda konkrečiai?
- Nustatome jūsų programos karkasą, versiją ir PHP reikalavimus ir išsiaiškiname, ar abu dar gauna saugumo atnaujinimus.
- Tikriname sandarą: ar žiniatinklio šaknyje yra tik
public, ar konfigūracija irvendorapsaugoti? - Karkaso ir PHP atnaujinimus planuojame atskirai, išbandome ir įdiegiame su visų darbinių procesų paleidimu iš naujo.
- Individualiems sprendimams siūlome saugumo auditą ir įsiskverbimo testą, kuris tikslingai tikrina karkaso apsaugos funkcijų naudojimą.
Dažni klausimai
Kuris PHP karkasas geriausias?
Tai priklauso nuo projekto. Lemia programos dydis ir gyvavimo trukmė, komandos žinios, projekto priežiūra ir aktualių PHP versijų palaikymas. Gerai prižiūrimas, komandai pažįstamas karkasas dažniausiai yra geresnis pasirinkimas nei šiuo metu populiariausias.
Ar karkasas apsaugo nuo PHP2Shell?
Ne. PHP2Shell yra PHP interpretatoriuje, o pasak PHP komandos, mod_php atveju exploit parodytas dar prieš pradedant vykdyti programos kodą. Joks karkaso atnaujinimas neatstoja PHP vykdymo aplinkos atnaujinimo ir visų darbinių procesų paleidimo iš naujo.
Kas yra mikrokarkasas (micro-framework)?
Mikrokarkasas teikia tik branduolį, paprastai maršrutizavimą, tarpinę programinę įrangą (middleware) ir užklausos bei atsakymo objektus. Prieigą prie duomenų bazės, šablonus ar formas pasirenkate patys. Slim, pavyzdžiui, pats save vadina PHP mikrokarkasu.
Ką reiškia, kad CMS naudoja Symfony komponentus?
Jis naudoja atskiras Symfony dalis, pavyzdžiui, HTTP apdorojimui ar konsolei, neperimdamas viso karkaso. Saugumo pranešimai apie šiuos komponentus tuomet liečia ir CMS, o tai svarbu planuojant atnaujinimus.