Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

PSR standardi PHP-FIG-a

PSR-ovi su zajednički standardi oko kojih se složilo mnogo PHP projekata. Ova stranica navodi sve PSR-ove sa statusom i pokazuje koji su važni u svakodnevici i gdje dotiču sigurnost.

Stanje 4 min čitanjaPHP znanje

Ukratko: PSR-ovi (PHP Standards Recommendations) standardi su PHP-FIG-a, skupine uglednih PHP projekata. Određuju zajednička pravila i sučelja, primjerice PSR-4 za autoloading, PSR-3 za loggere, PSR-7 za HTTP poruke i PSR-11 za containere. Svaki PSR ima status: prihvaćen, nacrt, zastario ili napušten. PSR-ovi kod čine zamjenjivijim i lakšim za provjeru, ali ne zatvaraju ranjivosti u PHP interpreteru poput PHP2Shella.

Što su PHP-FIG i PSR-ovi?

PHP-FIG označava PHP Framework Interop Group. Skupina svoj cilj sama opisuje kao unapređivanje PHP-a suradnjom i standardima. Iza PSR-a dakle ne stoji proizvođač, nego dogovor među projektima koji svoj softver žele održati međusobno kompatibilnim.

Za donositelje odluka korist je opipljiva: ako se aplikacija drži PSR sučelja, biblioteku za zapisivanje moguće je zamijeniti bez diranja cijelog koda. To smanjuje ovisnost o pojedinim paketima i pružateljima usluga.

Put jednog PSR-a: od Pre-Drafta do Accepteda

Statut PHP-FIG-a opisuje čvrst slijed:

  1. Pre-Draft: Utvrđuje se postoji li dovoljno interesa. Formira se radna skupina, a nakon uspješnog glasanja prijedlog dobiva PSR broj.
  2. Draft: Prijedlog se razrađuje, alternative i obrazloženja unose se u meta-dokument.
  3. Review: Zajednica testira specifikaciju probnim implementacijama, najmanje četiri tjedna i dok ne postoje dvije neovisne, održive izvedbe.
  4. Accepted: Nakon uspješnog glasanja PSR je prihvaćen; radna se skupina raspušta.

Uz to postoje još dva stanja. Deprecated znači: prihvaćen, ali se više ne preporučuje, najčešće jer ga zamjenjuje noviji standard. Abandoned znači: na njemu se više ne radi.

Svi PSR-ovi sa statusom

Stanje prema pregledu PHP-FIG-a u trenutku nastanka ove stranice:

Br. Naslov Status
PSR-0 Autoloading Standard zastario
PSR-1 Basic Coding Standard prihvaćen
PSR-2 Coding Style Guide zastario
PSR-3 Logger Interface prihvaćen
PSR-4 Autoloading Standard prihvaćen
PSR-5 PHPDoc Standard nacrt
PSR-6 Caching Interface prihvaćen
PSR-7 HTTP Message Interface prihvaćen
PSR-8 Huggable Interface napušten
PSR-9 Security Advisories napušten
PSR-10 Security Reporting Process napušten
PSR-11 Container Interface prihvaćen
PSR-12 Extended Coding Style Guide prihvaćen
PSR-13 Hypermedia Links prihvaćen
PSR-14 Event Dispatcher prihvaćen
PSR-15 HTTP Handlers prihvaćen
PSR-16 Simple Cache prihvaćen
PSR-17 HTTP Factories prihvaćen
PSR-18 HTTP Client prihvaćen
PSR-19 PHPDoc tags nacrt
PSR-20 Clock prihvaćen
PSR-21 Internationalization nacrt
PSR-22 Application Tracing nacrt

Najvažniji PSR-ovi za praksu

  • PSR-4 (autoloading): preslikava nazive klasa na putanje datoteka i temelj je Composerova autoloadera. Pojedinosti na stranici Namespaceovi i autoloading.
  • PSR-1 i PER Coding Style: zajednička pravila za pisanje i oblikovanje. PER Coding Style prema PHP-FIG-u proširuje i zamjenjuje PSR-12 te pretpostavlja PSR-1.
  • PSR-3 (logger): jedinstveno sučelje loggera u namespaceu Psr\Log s osam razina od emergency do debug.
  • PSR-7, PSR-15, PSR-17, PSR-18 (HTTP): sučelja za zahtjeve i odgovore, middleware, tvornice i HTTP klijente. Mnogi PHP frameworci na njima se temelje ili nude mostove.
  • PSR-11 (container): zajedničko sučelje za dependency injection containere.
  • PSR-6 i PSR-16 (cache): dva sučelja za privremenu pohranu, jedno opširno i jedno jednostavno.
  • PSR-14 i PSR-20 (događaji, sat): zajednička sučelja za događaje i za trenutačno vrijeme. Zamjenjiv sat kod ovisan o vremenu, primjerice istek tokena, čini dobro provjerljivim.

Brojevi, usput, ništa ne govore o važnosti. Dodjeljuju se pri ulasku u fazu nacrta, zato zastarjeli i napušteni prijedlozi stoje među važnim, prihvaćenim standardima.

<?php
use Psr\Log\LoggerInterface;

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

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

Što PSR-ovi imaju sa sigurnošću

Nekoliko standarda izravno dotiče sigurnost. PSR-3 određuje da se iznimke u kontekstu predaju pod ključem exception te da se rezervirana mjesta poput {datei} zamjenjuju iz konteksta. Vrijednosti se pritom ne smiju unaprijed maskirati jer logger ne zna gdje će se kasnije prikazivati. Tko zapisnike prikazuje u web-sučelju, mora ih maskirati ondje. Više u članku Sigurno zapisivanje.

PSR-7 opisuje HTTP poruke kao nepromjenjive objekte i pomoću UploadedFileInterface::moveTo() nudi jedinstven put za spremanje učitanih datoteka. Specifikacija zahtijeva da je izvorna datoteka nakon toga uklonjena. Provjera vrste datoteke i odredišta ostaje zadaća aplikacije.

Vrijedi istaknuti da su PSR-9 (Security Advisories) i PSR-10 (Security Reporting Process) napušteni. Zajedničkog standarda za sigurnosne obavijesti tako nema; svaki projekt to uređuje sam. Kako sâm PHP projekt postupa s ranjivostima, opisuje stranica Kako PHP projekt postupa sa sigurnosnim ranjivostima.

Protiv PHP2Shella standardi ne pomažu: ranjivosti CVE-2026-109618 i CVE-2026-109619 nalaze se u interpreteru. Obvezni su ažuriranje na PHP 8.5.12, 8.4.27, 8.3.36 ili 8.2.35 i ponovno pokretanje svih PHP procesa.

Kako PHP SOS konkretno pomaže?

  • Provjeravamo kako Vaša aplikacija zapisuje i osiguravamo da iznimke završavaju u zapisniku, ali ne i pristupni podaci ili oznake sesija.
  • Procjenjujemo kako su izvedeni upload i HTTP obrada, i kad se odvijaju preko PSR-7 biblioteka.
  • Vlastite razvoje istražujemo u okviru sigurnosnog audita i penetracijskog testa.
  • Instaliramo PHP ažuriranja, ponovno pokrećemo sve workere i dokumentiramo stanje.

Česta pitanja

Što znači PSR?

PSR označava PHP Standards Recommendation. Preporuke izrađuje i usklađuje PHP-FIG, PHP Framework Interop Group. Dobrovoljne su, ali ih provodi mnogo frameworka i biblioteka.

Vrijedi li PSR-12 još?

PSR-12 u PHP-FIG-u i dalje vodi status prihvaćenog. PHP-FIG je ipak objavio nasljednika, PER Coding Style, koji prema vlastitim riječima proširuje i zamjenjuje PSR-12. Trenutačna je ondje verzija 3.1.

Postoji li PSR za sigurnosne obavijesti?

Postojala su dva prijedloga: PSR-9 za sigurnosne obavijesti (security advisories) i PSR-10 za postupak prijave sigurnosnih ranjivosti. Oba su u PHP-FIG-u vođena kao napuštena. Projekti zato sami uređuju svoj postupak prijave.

Mora li moj projekt poštovati PSR-ove?

Ne, nema obveze. PSR-4 za autoloading te sučelja poput PSR-3 ili PSR-7 ipak znatno olakšavaju uporabu stranih paketa i promjenu pružatelja usluga.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć