Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

PHP-FIG PSR-standardid

PSR-id on ühised standardid, milles paljud PHP projektid on kokku leppinud. Leht loetleb kõik PSR-id staatusega ning näitab, millised on igapäevaselt olulised ja kus nad turvalisust puudutavad.

Seis Lugemisaeg 4 minPHP teadmised

Lühidalt: PSR-id (PHP Standards Recommendations) on PHP-FIG standardid, mis on väljakujunenud PHP projektide rühm. Need seavad ühised reeglid ja liidesed, näiteks PSR-4 automaatlaadimiseks, PSR-3 loggerite jaoks, PSR-7 HTTP-sõnumite jaoks ja PSR-11 konteinerite jaoks. Igal PSR-il on staatus: aktsepteeritud, mustand, iganenud või hüljatud. PSR-id teevad koodi vahetatavamaks ja kergemini kontrollitavaks, kuid ei sulge PHP interpretaatori turvauke nagu PHP2Shell.

Mis on PHP-FIG ja mis on PSR-id?

PHP-FIG tähendab PHP Framework Interop Group. Rühm kirjeldab oma eesmärki ise nii, et edendada PHP-d koostöö ja standardite kaudu. PSR-i taga ei seisa seega tootja, vaid projektide vaheline kokkulepe, mis tahavad oma tarkvara omavahel ühilduvana hoida.

Otsustajale on kasu käegakatsutav: kui rakendus peab kinni PSR-liidestest, saab näiteks logimisteegi välja vahetada, kogu koodi puutumata. See vähendab sõltuvust üksikutest pakettidest ja teenusepakkujatest.

PSR-i tee: Pre-Draftist Accepted'ini

PHP-FIG põhikiri kirjeldab kindlat kulgu:

  1. Pre-Draft: selgitatakse, kas huvi on piisav. Moodustub töörühm, eduka hääletuse järel saab ettepanek PSR-numbri.
  2. Draft: ettepanek töötatakse välja, alternatiivid ja põhjendused lähevad metadokumenti.
  3. Review: kogukond testib spetsifikatsiooni näidisrealisatsioonidega, vähemalt neli nädalat ja seni, kuni on olemas kaks sõltumatut, elujõulist rakendust.
  4. Accepted: pärast eduka hääletust on PSR vastu võetud; töörühm saadetakse laiali.

Lisaks on kaks muud olekut. Deprecated tähendab: vastu võetud, kuid enam mitte soovitatav, enamasti sellepärast, et uuem standard asendab seda. Abandoned tähendab: sellega ei tegeleta enam.

Kõik PSR-id staatusega

Seis PHP-FIG ülevaate järgi selle lehe koostamise ajal:

Nr. Pealkiri Staatus
PSR-0 Autoloading Standard iganenud
PSR-1 Basic Coding Standard aktsepteeritud
PSR-2 Coding Style Guide iganenud
PSR-3 Logger Interface aktsepteeritud
PSR-4 Autoloading Standard aktsepteeritud
PSR-5 PHPDoc Standard mustand
PSR-6 Caching Interface aktsepteeritud
PSR-7 HTTP Message Interface aktsepteeritud
PSR-8 Huggable Interface hüljatud
PSR-9 Security Advisories hüljatud
PSR-10 Security Reporting Process hüljatud
PSR-11 Container Interface aktsepteeritud
PSR-12 Extended Coding Style Guide aktsepteeritud
PSR-13 Hypermedia Links aktsepteeritud
PSR-14 Event Dispatcher aktsepteeritud
PSR-15 HTTP Handlers aktsepteeritud
PSR-16 Simple Cache aktsepteeritud
PSR-17 HTTP Factories aktsepteeritud
PSR-18 HTTP Client aktsepteeritud
PSR-19 PHPDoc tags mustand
PSR-20 Clock aktsepteeritud
PSR-21 Internationalization mustand
PSR-22 Application Tracing mustand

Praktikas olulisemad PSR-id

  • PSR-4 (automaatlaadimine): seab klassinimed failiteedega vastavusse ja on Composeri autolaaduri alus. Üksikasjad lehel Nimeruumid ja automaatlaadimine.
  • PSR-1 ja PER Coding Style: ühised reeglid kirjaviisi ja vormingu kohta. PER Coding Style laiendab ja asendab PHP-FIG andmetel PSR-12 ning eeldab PSR-1.
  • PSR-3 (Logger): ühtne logeri liides nimeruumis Psr\Log kaheksa tasemega alates emergency kuni debug.
  • PSR-7, PSR-15, PSR-17, PSR-18 (HTTP): liidesed päringute ja vastuste, vahevara (middleware), vabrikute ja HTTP-klientide jaoks. Paljud PHP raamistikud ehitavad neile või pakuvad sildu.
  • PSR-11 (konteiner): ühine liides Dependency-Injection-konteineritele.
  • PSR-6 ja PSR-16 (vahemälu): kaks liidest vahemälu jaoks, üks põhjalik ja üks lihtne.
  • PSR-14 ja PSR-20 (sündmused, kell): ühised liidesed sündmuste ja praeguse aja jaoks. Vahetatav kell teeb ajast sõltuva koodi, näiteks tokenite aegumise, hästi testitavaks.

Numbrid ei ütle muide tähtsuse kohta midagi. Need antakse välja mustandifaasi sisenemisel, seetõttu seisavad iganenud ja hüljatud ettepanekud olulisemate, aktsepteeritud standardite vahel.

<?php
use Psr\Log\LoggerInterface;

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

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

Mis seos on PSR-idel turvalisusega

Mitu standardit puudutavad turvalisust otse. PSR-3 sätestab, et erandid antakse kontekstis edasi võtme exception all ning kohatäitjad nagu {datei} asendatakse kontekstist. Väärtusi ei tohi seejuures ette maskeerida, sest logija ei tea, kus neid hiljem kuvatakse. Kes kuvab logisid veebiliideses, peab seal maskeerima. Lähemalt artiklis Turvaline logimine.

PSR-7 kirjeldab HTTP-sõnumeid muutumatute objektidena ja pakub meetodiga UploadedFileInterface::moveTo() ühtset viisi üleslaaditud failide salvestamiseks. Spetsifikatsioon nõuab, et algfail on pärast seda eemaldatud. Failitüübi ja sihtkoha kontrollimine jääb rakenduse ülesandeks.

Tähelepanuväärne on, et PSR-9 (Security Advisories) ja PSR-10 (Security Reporting Process) on hüljatud. Ühist standardit turvateadete jaoks seega ei ole; iga projekt reguleerib seda ise. Kuidas PHP projekt ise turvaaukudega ümber käib, kirjeldab leht Kuidas PHP projekt turvaauke käsitleb.

PHP2Shelli vastu standardid ei aita: turvaaugud CVE-2026-109618 ja CVE-2026-109619 asuvad interpretaatoris. Kohustuslik on uuendus versioonile PHP 8.5.12, 8.4.27, 8.3.36 või 8.2.35 ja kõigi PHP protsesside taaskäivitus.

Kuidas PHP SOS konkreetselt aitab?

  • Kontrollime, kuidas teie rakendus logib, ja tagame, et erandid satuvad logisse, aga ligipääsuandmed või sessioonitunnused mitte.
  • Hindame, kuidas üleslaadimise ja HTTP töötlus on realiseeritud, ka siis, kui see käib PSR-7 teekide kaudu.
  • Uurime omaarendusi turvaauditi ja penetratsioonitesti raames.
  • Paigaldame PHP uuendused, käivitame kõik workerid uuesti ja dokumenteerime seisu.

Korduma kippuvad küsimused

Mida tähendab PSR?

PSR tähendab PHP Standards Recommendation. Soovitused töötab välja ja lepib kokku PHP-FIG ehk PHP Framework Interop Group. Need on vabatahtlikud, kuid paljud raamistikud ja teegid rakendavad neid.

Kas PSR-12 kehtib veel?

PHP-FIG-is on PSR-12 endiselt aktsepteeritud staatusega. PHP-FIG on aga avaldanud järglase, PER Coding Style, mis oma sõnul laiendab ja asendab PSR-12. Praegu on seal versioon 3.1.

Kas turvateadete jaoks on olemas PSR?

Oli kaks ettepanekut, PSR-9 turvateadete (Security Advisories) jaoks ja PSR-10 turvaaukudest teatamise protsessi jaoks. Mõlemad on PHP-FIG-is hüljatud. Projektid reguleerivad oma teavitusprotsessi seetõttu ise.

Kas minu projekt peab PSR-e järgima?

Ei, kohustust ei ole. Automaatlaadimise PSR-4 ja liidesed nagu PSR-3 või PSR-7 muudavad aga võõraste pakettide kasutamise ja teenusepakkujate vahetuse tunduvalt lihtsamaks.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi