Aktuálna situácia: PHP2Shell. Dve kritické zraniteľnosti PHP (CVSS 9.2) umožňujú spustenie škodlivého kódu bez prihlásenia. Záplaty od 21. 10. 2026.Čo treba urobiť teraz →

Štandardy PSR od PHP-FIG

PSR sú spoločné štandardy, na ktorých sa dohodlo mnoho projektov PHP. Táto stránka uvádza všetky PSR so stavom a ukazuje, ktoré sa uplatňujú v praxi a kde sa dotýkajú bezpečnosti.

Stav 4 min čítaniaZnalosti o PHP

Stručne: PSR (PHP Standards Recommendations) sú štandardy PHP-FIG, skupiny etablovaných projektov PHP. Určujú spoločné pravidlá a rozhrania, napríklad PSR-4 pre autoloading, PSR-3 pre loggery, PSR-7 pre správy HTTP a PSR-11 pre kontajnery. Každý PSR má stav: akceptovaný, návrh, zastaraný alebo opustený. PSR robia kód zameniteľnejším a ľahšie kontrolovateľným, ale neuzatvárajú zraniteľnosti v interpreteri PHP, ako PHP2Shell.

Čo je PHP-FIG a čo sú PSR?

PHP-FIG znamená PHP Framework Interop Group. Skupina sama opisuje svoj cieľ ako posúvanie PHP dopredu prostredníctvom spolupráce a štandardov. Za PSR teda nestojí výrobca, ale dohoda medzi projektmi, ktoré chcú svoj softvér udržať navzájom kompatibilný.

Pre rozhodovateľov je prínos hmatateľný: ak sa aplikácia drží rozhraní PSR, dá sa napríklad vymeniť knižnica na zapisovanie logov bez zásahu do celého kódu. To znižuje závislosť od jednotlivých balíkov a dodávateľov.

Cesta PSR: od Pre-Draft po Accepted

Stanovy PHP-FIG opisujú pevný postup:

  1. Pre-Draft: Zisťuje sa, či je dostatočný záujem. Vytvorí sa pracovná skupina a po úspešnom hlasovaní dostane návrh číslo PSR.
  2. Draft: Návrh sa vypracúva, alternatívy a odôvodnenia sa dostanú do metadokumentu.
  3. Review: Komunita testuje špecifikáciu pomocou skúšobných implementácií, najmenej štyri týždne a dovtedy, kým nie sú k dispozícii dve nezávislé, životaschopné implementácie.
  4. Accepted: Po úspešnom hlasovaní je PSR prijatý; pracovná skupina sa rozpustí.

Okrem toho existujú dva ďalšie stavy. Deprecated znamená: prijatý, ale už sa neodporúča, väčšinou preto, že ho nahradil novší štandard. Abandoned znamená: už sa na ňom nepracuje.

Všetky PSR so stavom

Stav podľa prehľadu PHP-FIG v čase vzniku tejto stránky:

Č. Názov Stav
PSR-0 Autoloading Standard zastaraný
PSR-1 Basic Coding Standard akceptovaný
PSR-2 Coding Style Guide zastaraný
PSR-3 Logger Interface akceptovaný
PSR-4 Autoloading Standard akceptovaný
PSR-5 PHPDoc Standard návrh
PSR-6 Caching Interface akceptovaný
PSR-7 HTTP Message Interface akceptovaný
PSR-8 Huggable Interface opustený
PSR-9 Security Advisories opustený
PSR-10 Security Reporting Process opustený
PSR-11 Container Interface akceptovaný
PSR-12 Extended Coding Style Guide akceptovaný
PSR-13 Hypermedia Links akceptovaný
PSR-14 Event Dispatcher akceptovaný
PSR-15 HTTP Handlers akceptovaný
PSR-16 Simple Cache akceptovaný
PSR-17 HTTP Factories akceptovaný
PSR-18 HTTP Client akceptovaný
PSR-19 PHPDoc tags návrh
PSR-20 Clock akceptovaný
PSR-21 Internationalization návrh
PSR-22 Application Tracing návrh

Najdôležitejšie PSR pre prax

  • PSR-4 (autoloading): priraďuje názvy tried k cestám súborov a je základom autoloadera Composeru. Podrobnosti na stránke Menné priestory a autoloading.
  • PSR-1 a PER Coding Style: spoločné pravidlá pre písanie a formátovanie. PER Coding Style podľa PHP-FIG rozširuje a nahrádza PSR-12 a predpokladá PSR-1.
  • PSR-3 (logger): jednotné rozhranie loggera v mennom priestore Psr\Log s ôsmimi úrovňami od emergency po debug.
  • PSR-7, PSR-15, PSR-17, PSR-18 (HTTP): rozhrania pre požiadavky a odpovede, middleware, továrne a klientov HTTP. Mnohé frameworky PHP na nich stoja alebo ponúkajú mosty.
  • PSR-11 (kontajner): spoločné rozhranie pre kontajnery dependency injection.
  • PSR-6 a PSR-16 (cache): dve rozhrania pre vyrovnávaciu pamäť, podrobné a jednoduché.
  • PSR-14 a PSR-20 (udalosti, hodiny): spoločné rozhrania pre udalosti a pre aktuálny čas. Vymeniteľné hodiny robia kód závislý od času, napríklad vypršanie platnosti tokenov, dobre testovateľným.

Čísla mimochodom nič nevypovedajú o dôležitosti. Prideľujú sa pri vstupe do fázy návrhu, preto stoja zastarané a opustené návrhy medzi dôležitými, akceptovanými štandardmi.

<?php
use Psr\Log\LoggerInterface;

final class Bestellimport
{
    public function __construct(private LoggerInterface $log) {}

    public function importieren(string $datei): void
    {
        try {
            // ... spracovať súbor ...
        } catch (\Throwable $e) {
            $this->log->error('Import von {datei} fehlgeschlagen', [
                'datei'     => basename($datei),
                'exception' => $e,
            ]);
        }
    }
}

Čo majú PSR spoločné s bezpečnosťou

Viaceré štandardy sa bezpečnosti dotýkajú priamo. PSR-3 určuje, že výnimky sa odovzdávajú pod kľúčom exception v kontexte a zástupné znaky ako {datei} sa nahrádzajú z kontextu. Hodnoty pritom nemajú byť vopred maskované, pretože logger nevie, kde sa neskôr zobrazia. Kto zobrazuje logy vo webovom rozhraní, musí maskovať tam. Viac v článku Bezpečné zapisovanie do logov.

PSR-7 opisuje správy HTTP ako nemenné objekty a s UploadedFileInterface::moveTo() ponúka jednotný spôsob ukladania nahraných súborov. Špecifikácia vyžaduje, aby bol pôvodný súbor potom odstránený. Kontrola typu súboru a cieľového miesta zostáva úlohou aplikácie.

Pozoruhodné je, že PSR-9 (Security Advisories) a PSR-10 (Security Reporting Process) boli opustené. Spoločný štandard pre bezpečnostné oznámenia teda neexistuje; každý projekt si ho upravuje sám. Ako so zraniteľnosťami nakladá samotný projekt PHP, opisuje stránka Ako projekt PHP rieši bezpečnostné zraniteľnosti.

Proti PHP2Shell štandardy nepomáhajú: zraniteľnosti CVE-2026-109618 a CVE-2026-109619 sú v interpreteri. Povinná je aktualizácia na PHP 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35 a reštart všetkých procesov PHP.

Ako PHP SOS konkrétne pomáha?

  • Kontrolujeme, ako vaša aplikácia zapisuje logy, a zabezpečujeme, aby výnimky skončili v logu, ale nie prístupové údaje ani identifikátory relácií.
  • Hodnotíme, ako je implementované spracovanie nahrávania a HTTP, aj keď beží cez knižnice PSR-7.
  • Vlastné vývojové diela skúmame v rámci bezpečnostného auditu a penetračného testu.
  • Nasadzujeme aktualizácie PHP, reštartujeme všetky workery a dokumentujeme stav.

Časté otázky

Čo znamená PSR?

PSR znamená PHP Standards Recommendation. Odporúčania vypracúva a odsúhlasuje PHP-FIG, PHP Framework Interop Group. Sú dobrovoľné, ale mnohé frameworky a knižnice ich implementujú.

Platí PSR-12 ešte?

PSR-12 je u PHP-FIG naďalej vedený ako akceptovaný. PHP-FIG však zverejnila pod názvom PER Coding Style nástupcu, ktorý podľa vlastného vyjadrenia PSR-12 rozširuje a nahrádza. Aktuálna je tam verzia 3.1.

Existuje PSR pre bezpečnostné oznámenia?

Existovali dva návrhy, PSR-9 pre Security Advisories a PSR-10 pre proces hlásenia bezpečnostných zraniteľností. Oba sú u PHP-FIG vedené ako opustené. Projekty si preto proces hlásenia upravujú samy.

Musí môj projekt dodržiavať PSR?

Nie, povinnosť neexistuje. PSR-4 pre autoloading a rozhrania ako PSR-3 alebo PSR-7 však výrazne uľahčujú nasadenie cudzích balíkov a výmenu dodávateľov.

Zdroje

Okamžitý kontakt

Každá hodina sa počíta. Napíšte nám hneď.

Stručne opíšte systém, verziu PHP a svoje pozorovanie. Ozveme sa, vyjasníme situáciu a budeme pracovať na diaľku, kým nebude incident uzavretý a zdokumentovaný.

Okamžitá pomoc