# A PHP-FIG PSR-szabványai

> A PHP-FIG PSR-szabványai 0-tól 22-ig státusszal, a gyakorlatban legfontosabbak, és mit jelent a PSR-3, a PSR-4 és a PSR-7 a biztonság számára.

Forrás: https://phpsos.de/hu/php/psr-standards/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**Röviden:** A PSR-ek (PHP Standards Recommendations) a PHP-FIG szabványai, amely bevett PHP-projektek csoportja. Közös szabályokat és interfészeket határoznak meg, például a PSR-4-et az autoloadinghoz, a PSR-3-at a loggerekhez, a PSR-7-et a HTTP-üzenetekhez és a PSR-11-et a konténerekhez. Minden PSR-nek státusza van: elfogadott, tervezet, elavult vagy felhagyott. A PSR-ek cserélhetőbbé és könnyebben ellenőrizhetővé teszik a kódot, de nem zárják be a PHP-értelmezőben lévő réseket, mint a PHP2Shell.

## Mi a PHP-FIG, és mik a PSR-ek?

A PHP-FIG a PHP Framework Interop Group rövidítése. A csoport maga úgy írja le a célját, hogy az együttműködéssel és szabványokkal viszi előre a PHP-t. Egy PSR mögött tehát nem gyártó áll, hanem olyan projektek egyeztetése, amelyek szoftverüket egymással kompatibilisen akarják tartani.

A döntéshozók számára a haszon kézzelfogható: ha egy alkalmazás betartja a PSR-interfészeket, például a naplózó programkönyvtár kicserélhető anélkül, hogy az egész kódhoz hozzá kellene nyúlni. Ez csökkenti az egyes csomagoktól és szolgáltatóktól való függőséget.

## Egy PSR útja a Pre-Drafttól az Accepted-ig

A PHP-FIG alapszabálya szilárd folyamatot ír le:

1. **Pre-Draft:** Tisztázzák, van-e elég érdeklődés. Munkacsoport alakul, sikeres szavazás után a javaslat PSR-számot kap.
2. **Draft:** A javaslatot kidolgozzák, az alternatívák és az indoklások egy meta-dokumentumba kerülnek.
3. **Review:** A közösség próbamegvalósításokkal teszteli a specifikációt, legalább négy hétig, és amíg két független, életképes megvalósítás nem áll rendelkezésre.
4. **Accepted:** Sikeres szavazás után a PSR elfogadott; a munkacsoport feloszlik.

Emellett két további állapot létezik. A **Deprecated** azt jelenti: elfogadott, de már nem ajánlott, többnyire azért, mert egy újabb szabvány felváltja. Az **Abandoned** azt jelenti: már nem dolgoznak rajta.

## Az összes PSR státusszal

A PHP-FIG áttekintése szerinti állapot az oldal keletkezésének időpontjában:

| Sz. | Cím | Státusz |
|---|---|---|
| PSR-0 | Autoloading Standard | elavult |
| PSR-1 | Basic Coding Standard | elfogadott |
| PSR-2 | Coding Style Guide | elavult |
| PSR-3 | Logger Interface | elfogadott |
| PSR-4 | Autoloading Standard | elfogadott |
| PSR-5 | PHPDoc Standard | tervezet |
| PSR-6 | Caching Interface | elfogadott |
| PSR-7 | HTTP Message Interface | elfogadott |
| PSR-8 | Huggable Interface | felhagyott |
| PSR-9 | Security Advisories | felhagyott |
| PSR-10 | Security Reporting Process | felhagyott |
| PSR-11 | Container Interface | elfogadott |
| PSR-12 | Extended Coding Style Guide | elfogadott |
| PSR-13 | Hypermedia Links | elfogadott |
| PSR-14 | Event Dispatcher | elfogadott |
| PSR-15 | HTTP Handlers | elfogadott |
| PSR-16 | Simple Cache | elfogadott |
| PSR-17 | HTTP Factories | elfogadott |
| PSR-18 | HTTP Client | elfogadott |
| PSR-19 | PHPDoc tags | tervezet |
| PSR-20 | Clock | elfogadott |
| PSR-21 | Internationalization | tervezet |
| PSR-22 | Application Tracing | tervezet |

## A gyakorlatban legfontosabb PSR-ek

- **PSR-4 (autoloading):** osztályneveket képez le fájlútvonalakra, és a Composer-autoloader alapja. Részletek a [Névterek és autoloading](https://phpsos.de/hu/php/namespaces-autoloading/) oldalon.
- **PSR-1 és PER Coding Style:** közös szabályok az írásmódra és a formázásra. A PER Coding Style a PHP-FIG szerint kiterjeszti és felváltja a PSR-12-t, és előfeltételezi a PSR-1-et.
- **PSR-3 (logger):** egységes logger-interfész a `Psr\Log` névtérben, nyolc szinttel az `emergency`-től a `debug`-ig.
- **PSR-7, PSR-15, PSR-17, PSR-18 (HTTP):** interfészek a kérésekhez és válaszokhoz, a middleware-hez, a gyárakhoz és a HTTP-kliensekhez. Sok [PHP-keretrendszer](https://phpsos.de/hu/php/php-frameworks/) ezekre épül, vagy hidakat kínál hozzájuk.
- **PSR-11 (konténer):** közös interfész a dependency injection konténerekhez.
- **PSR-6 és PSR-16 (gyorsítótár):** két interfész az átmeneti tárakhoz, egy részletes és egy egyszerű.
- **PSR-14 és PSR-20 (események, óra):** közös interfészek az eseményekhez és az aktuális időhöz. Egy cserélhető óra jól tesztelhetővé teszi az időfüggő kódot, például a tokenek lejáratát.

A számok egyébként nem mondanak semmit a jelentőségről. A tervezeti fázisba lépéskor osztják ki őket, ezért az elavult és felhagyott javaslatok fontos, elfogadott szabványok között állnak.

```php
<?php
use Psr\Log\LoggerInterface;

final class Bestellimport
{
    public function __construct(private LoggerInterface $log) {}

    public function importieren(string $datei): void
    {
        try {
            // ... fájl feldolgozása ...
        } catch (\Throwable $e) {
            $this->log->error('Import von {datei} fehlgeschlagen', [
                'datei'     => basename($datei),
                'exception' => $e,
            ]);
        }
    }
}
```

## Mi köze a PSR-eknek a biztonsághoz?

Több szabvány közvetlenül érinti a biztonságot. A PSR-3 előírja, hogy a kivételeket a kontextusban az `exception` kulcs alatt kell átadni, és a `{datei}` típusú helyőrzőket a kontextusból helyettesítik. Az értékeket nem szabad előre maszkolni, mert a logger nem tudja, hol jelennek meg később. Aki a naplókat webes felületen jeleníti meg, ott maszkolni kell. Erről többet a [Biztonságos naplózás](https://phpsos.de/hu/blog/sicher-loggen-php/) cikkben talál.

A PSR-7 a HTTP-üzeneteket megváltoztathatatlan objektumokként írja le, és az `UploadedFileInterface::moveTo()` révén egységes utat kínál a feltöltött fájlok mentéséhez. A specifikáció megköveteli, hogy az eredeti fájl utána el legyen távolítva. A fájltípus és a célhely ellenőrzése az alkalmazás feladata marad.

Figyelemre méltó, hogy a PSR-9 (Security Advisories) és a PSR-10 (Security Reporting Process) felhagyottá vált. A biztonsági közleményekre tehát nincs közös szabvány; minden projekt maga szabályozza. Hogyan kezeli maga a PHP-projekt a réseket, azt a [Hogyan kezeli a PHP-projekt a biztonsági réseket](https://phpsos.de/hu/php/php-sicherheitsprozess/) oldal írja le.

A PHP2Shell ellen a szabványok nem segítenek: a CVE-2026-109618 és a CVE-2026-109619 rések az értelmezőben vannak. Kötelező a frissítés a PHP 8.5.12, 8.4.27, 8.3.36 vagy 8.2.35 verzióra, és az összes PHP-folyamat újraindítása.

## Hogyan segít konkrétan a PHP SOS?

- Megvizsgáljuk, hogyan naplóz az alkalmazása, és gondoskodunk arról, hogy a kivételek a naplóba kerüljenek, de hozzáférési adatok vagy munkamenet-azonosítók ne.
- Értékeljük, hogyan valósul meg a feltöltések és a HTTP-feldolgozás, akkor is, ha PSR-7-programkönyvtárakon keresztül fut.
- Saját fejlesztéseit a [biztonsági audit és penetrációs teszt](https://phpsos.de/hu/leistungen/sicherheitsaudit-penetrationstest/) keretében vizsgáljuk meg.
- Telepítjük a PHP-frissítéseket, újraindítjuk az összes workert, és dokumentáljuk az állapotot.


## Gyakori kérdések

**Mit jelent a PSR?**  
A PSR a PHP Standards Recommendation rövidítése. Az ajánlásokat a PHP-FIG, a PHP Framework Interop Group dolgozza ki és egyezteti. Önkéntesek, de sok keretrendszer és programkönyvtár megvalósítja őket.

**Érvényes még a PSR-12?**  
A PSR-12 a PHP-FIG-nél továbbra is elfogadottként szerepel. A PHP-FIG azonban a PER Coding Style-lal közzétett egy utódot, amely saját állítása szerint kiterjeszti és felváltja a PSR-12-t. Jelenleg ott a 3.1-es verzió az aktuális.

**Van PSR a biztonsági közleményekhez?**  
Két javaslat volt: a PSR-9 a biztonsági tanácsokhoz (Security Advisories), a PSR-10 a biztonsági rések bejelentésének folyamatához. Mindkettő a PHP-FIG-nél felhagyottként szerepel. A projektek ezért maguk szabályozzák a bejelentési folyamatukat.

**Be kell tartania a projektemnek a PSR-eket?**  
Nem, nincs kötelezettség. A PSR-4 az autoloadinghoz, valamint az olyan interfészek, mint a PSR-3 vagy a PSR-7 azonban jelentősen megkönnyítik az idegen csomagok használatát és a szolgáltatóváltást.

## Források

- [PHP-FIG: PSR-áttekintés](https://www.php-fig.org/psr/)
- [PHP-FIG: PSR-munkafolyamat](https://www.php-fig.org/bylaws/psr-workflow/)
- [PHP-FIG: PER Coding Style](https://www.php-fig.org/per/coding-style/)
- [PHP-FIG: PSR-3 Logger Interface](https://www.php-fig.org/psr/psr-3/)
- [PHP-FIG: PSR-7 HTTP Message Interface](https://www.php-fig.org/psr/psr-7/)
