Wersja PHP i koniec wsparcia
ważność wysokamierzonysposób php_wersja
PHP po końcu wsparcia nie dostaje poprawek bezpieczeństwa. Strona stoi wtedy na warstwie, której nikt już nie łata.
Wdrożony 01.10 (badanie profilem). Z zewnątrz widać tylko nagłówek X-Powered-By, który większość hostingów usuwa (wersję ujawnia 14 z 265 stron, 01.10). Wtedy wersję bierze z migawki wtyczki; bez nagłówka i bez wtyczki — „nie dało się sprawdzić”.
WIKI
artykuł z 16.09.2026 · źródeł 9Wersja PHP i koniec wsparcia to parametr monitoringu stron internetowych, który ustala, na jakiej gałęzi PHP działa strona, i porównuje ją z harmonogramem wsparcia projektu PHP. Wynikiem jest gałąź wspierana, gałąź po końcu wsparcia albo wersja nieznana. Każda gałąź PHP ma pełne wsparcie przez dwa lata od pierwszego stabilnego wydania, a potem przez kolejne dwa lata dostaje wyłącznie poprawki krytycznych problemów bezpieczeństwa [1].
Jak działa
W okresie pełnego wsparcia zgłoszone błędy i problemy bezpieczeństwa są poprawiane w regularnych wydaniach. W okresie poprawek bezpieczeństwa wydania powstają tylko wtedy, gdy są potrzebne. Po końcu wsparcia (EOL) gałąź nie jest już utrzymywana, a jej użytkownicy mogą być narażeni na niezałatane podatności [1]. Terminy w tabeli PHP kończą się 31 grudnia: gałąź 8.2, wydana 8 grudnia 2022 r., ma poprawki bezpieczeństwa do 31 grudnia 2026 r. [1]. Najnowsza gałąź 8.5, wydana 20 listopada 2025 r., ma pełne wsparcie do 31 grudnia 2027 r., a poprawki bezpieczeństwa do 31 grudnia 2029 r. [1].
Z zewnątrz wersję zdradza jedynie nagłówek odpowiedzi HTTP. Dyrektywa expose_php ujawnia, że na serwerze działa PHP, razem z wersją w nagłówku, np. X-Powered-By: PHP/5.3.7; ustawia się ją tylko w php.ini, a jej wartość domyślna to 1, czyli włączona [5]. OWASP zaleca usuwanie wszystkich nagłówków X-Powered-By [6], więc brak nagłówka oznacza wersję nieznaną, a nie brak PHP. Nawet obecny nagłówek nie rozstrzyga o łatkach: dystrybucje przenoszą poprawki bezpieczeństwa do starszych wersji pakietów, a narzędzia oceniające podatność wyłącznie po numerze wersji dają fałszywe alarmy [7].
Od środka odczyt jest dokładny. WordPress wysyła stałą PHP_VERSION do usługi serve-happy w api.wordpress.org, przechowuje odpowiedź przez tydzień i przy wersji uznanej za nieakceptowalną pokazuje ostrzeżenie administratorom w kokpicie [8]. Filtr wp_is_php_version_acceptable pozwala ten test tylko zaostrzyć, a nie złagodzić [8].
Standardy i specyfikacje
- Harmonogram PHP określa zasadę dwóch lat pełnego wsparcia i dwóch lat poprawek bezpieczeństwa [1]. Wsparcie zakończyły m.in. gałęzie 7.4 (28 listopada 2022 r.), 8.0 (26 listopada 2023 r.) i 8.1 (31 grudnia 2025 r.) [2]. Dla każdej takiej gałęzi projekt podaje ostatnie wydanie, np. 8.0.30 i 8.1.34; nowsze wydania tych gałęzi już nie powstaną, więc numer poprawki w nagłówku nie zmienia oceny [2].
- Wymagania WordPressa zalecają PHP w wersji 8.3 lub nowszej. WordPress działa też z PHP 7.4 i nowszym, ale według tej samej strony takie wersje są po końcu wsparcia i mogą narażać stronę na podatności [3].
- Statystyki wordpress.org z 16 września 2026 r. pokazują 25,3% instalacji na PHP 8.3, 24,7% na 8.2, 16,9% na 7.4 i 11,3% na 8.1; gałęzie 8.1 i starsze łącznie to około 38% [4], czyli wersje już bez wsparcia [2]. Gałąź 8.2 dostaje poprawki bezpieczeństwa do 31 grudnia 2026 r. [1].
Zagrożenia i skutki
Brak poprawek. Projekt PHP ostrzega, że starsze wersje mogą narażać na podatności i błędy poprawione w nowszych wydaniach [2]. Przykładem jest CVE-2024-4577: obejście starej poprawki CVE-2012-1823 w PHP-CGI na Windows z wybranymi stronami kodowymi, pozwalające wykonać dowolny kod PHP przez spreparowane żądanie HTTP [9]. Poprawki wydano w wersjach 8.1.29, 8.2.20 i 8.3.8 [9]; gałęzi 8.0, która zakończyła wsparcie 26 listopada 2023 r., nie ma na tej liście [2].
Ujawniona wersja. Nagłówek X-Powered-By podaje technologie serwera i według OWASP ułatwia atakującym szukanie podatności, choć mają oni też inne metody rozpoznania [6]. Ujawnianie wersji samego WordPressa opisuje artykuł Wersja WordPressa.
Mylący odczyt. Numer wersji z pakietu dystrybucji może być stary, a mimo to zawierać przeniesione poprawki: gałąź PHP 5.3 zakończyła wsparcie 14 sierpnia 2014 r., a w październiku wykryto w PHP przepełnienie bufora CVE-2014-3670, które mogło pozwolić na wykonanie dowolnego kodu. Red Hat przeniósł poprawkę do pakietów PHP 5.3 w RHEL 6, bo część klientów nie mogła przejść na 5.4 z powodu problemów ze zgodnością [7]. Odwrotnie, ukryty nagłówek nie wyklucza przestarzałej gałęzi [5].
Przykłady
| Odczyt | Wniosek |
|---|---|
X-Powered-By: PHP/8.3.x | gałąź z poprawkami bezpieczeństwa do 31 grudnia 2027 r. [1] |
X-Powered-By: PHP/8.2.x | gałąź z poprawkami bezpieczeństwa tylko do 31 grudnia 2026 r. [1] |
X-Powered-By: PHP/7.4.33 | ostatnie wydanie gałęzi 7.4, bez wsparcia od 2022 r. [2] |
| stara wersja z pakietu dystrybucji | możliwe poprawki przeniesione przez dystrybutora [7] |
| brak nagłówka | wersja nieznana, nagłówek mógł zostać wyłączony [5] [6] |
| ostrzeżenie o PHP w kokpicie WordPressa | wersja uznana przez wordpress.org za nieakceptowalną [8] |
- [1] Supported Versions · The PHP Group
- [2] Unsupported Branches · The PHP Group
- [3] Requirements · WordPress.org
- [4] PHP versions in use — statystyki API (odczyt 2026-09-16) · WordPress.org
- [5] Description of core php.ini directives — expose_php · PHP Manual
- [6] HTTP Headers Cheat Sheet · OWASP
- [7] Backporting Security Fixes · Red Hat
- [8] misc.php — wp_check_php_version() (wordpress-develop, trunk) · WordPress
- [9] GHSA-3qgc-jrrr-25jv — Argument Injection in PHP-CGI (CVE-2024-4577) · PHP Group / GitHub
STATS
wyniki z systemu · tylko liczby zbiorczeTen parametr nie zapisuje odczytu per strona — przebieg zostawia tylko ustalenia, więc liczby sprawdzonych stron i wyników „ok” system nie ma. Pojawią się po wdrożeniu zapisu przebiegów per strona per parametr.
Ten parametr nie otworzył jeszcze żadnego ustalenia w bazie LAB247. Pusto nie znaczy „czysto” — znaczy, że nic nie przekroczyło reguły.
Harmonogram nie zapisał jeszcze przebiegu ze sposobem „php_wersja”. Zapis przebiegów z n8n działa od 2026-09-14.
CARD
karta z kodu CREATO_PING, odczyt 01.10.2026Jak ten parametr trafia do ClickUpa: wynik sondy to linia w subtasku 2. Pomiar, a usterka, którą otwiera — linia w subtasku 1. Podsumowanie (z identyfikatorem CWE i kategorią OWASP), skąd liczy się wskaźnik zagrożenia i status strony. Projekcja z bazy skanera odświeża oba subtaski co godzinę. Do 22.09 każde ustalenie dostawało własny subtask i status ze starego słownika (PODATNA, WARNING…) — te słowa zostały jeszcze w części opisów pomiaru niżej jako język wewnętrzny sond.
| Obszar i ważność | Bezpieczeństwo · wysoka (B32) |
|---|---|
| Workflow i częstotliwość | skaner_badanie działa na LAB247Skaner 2.0, badanie kohorty: premium co 12 h, reszta co 24–48 h · Od 2026-10-01 zestawy kohort (premium_pelny, tani_ciezki, tani_lekki) mają tury higiena, serwer, sklep, kasa i strony (wyciek ścieżek B41, CMS po EOL B44, kluczowe podstrony S08, odnośniki kontaktowe D10); nocny pomiar wydajności (trend, waga, od 01.10 też metryki pasma W01–W04 i W07) tylko premium — u reszty prośba o pomiar zagłodziłaby nocny plan. Sklep: strona bez WooCommerce = „nie dotyczy”. |
| Sonda i helper | sposób php_wersja · CREATO_PING/helpers/higiena_check.py |
| Testy |
|
| Typ wyniku | ok z wersją PHP, datą końca wsparcia, flagą po_koncu_wsparcia i źródłem wersji (zrodlo_wersji: naglowek | wtyczka); 0 albo 1 ustalenie outdated_php; nie_dalo_sie_sprawdzic (`zrodlo_nie_odpowiada`, `brak_danych_w_odpowiedzi`) |
| Jednostka | wersja PHP (gałąź major.minor) i data końca wsparcia bezpieczeństwa; wynik jakościowy |
| Próg i reguła | Reguła: dzisiejsza data późniejsza niż koniec wsparcia gałęzi = outdated_php (powaga niska w helperze i w polityce). Limit 8,0 s na żądanie (TIMEOUT_S). |
| Gdzie leżą pokrętła | CREATO_PING/helpers/higiena_check.py → PHP_EOL, php_z_naglowka, php_eol, php_wersja, TIMEOUT_SCREATO_PING/skaner/strona.py → uruchom_parasol (php_version ze strony_parametry jako wejście testu)CREATO_PING/config/incident_policy.toml → [finding] outdated_php |
| Retencja odczytów | Surowy pomiar jako NIEZMIENNY wiersz tabeli `odczyty` w bazie skanera (wejście, wyjście, dowody, sha karty sondy i helpera, commit kodu) — trigger odrzuca każdą zmianę. Okno retencji z kohorty: 90 dni premium, 30 dni reszta; poza oknem zostają odczyty z werdyktem problemu, akcją albo etykietą, bo replay reguł ich potrzebuje (`skaner/retencja.py`). Poza odczytem zostaje werdykt w tabeli `werdykty`; sprawy nie ma, bo badanie jej nie zakłada. Panel klienta LAB247 czyta najnowszy odczyt na żądanie (`GET /latest-readings`). |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/higiena_check.py · CREATO_PING/helpers/security_testy.py · CREATO_PING/skaner/strona.py · CREATO_PING/skaner/worker.py · CREATO_PING/skaner/scenariusze/premium_pelny.toml · CREATO_PING/skaner/scenariusze/tani_ciezki.toml · CREATO_PING/skaner/scenariusze/tani_lekki.toml · CREATO_PING/skaner/kohorty.toml · CREATO_PING/config/incident_policy.toml · CREATO_PING/skaner/usterki.toml · CREATO_PING/skaner/ocena.py · odczyt 01.10.2026 |
outdated_php: bramka polityki otwarta (gate=true) → sprawa w skanerze → PHP bez wsparcia bezpieczeństwa (widoczne z zewnątrz) — waga 1 → ocena 2 (zielony), status strony „sprawna”, dopóki sprawa jest otwarta. Ten test chodzi wyłącznie w badaniu kohort, a sprawy zakłada worker tylko dla zleceń z harmonogramu (`skaner/worker.py` → ZRODLA_PRODUKCJI): w badaniu droga kończy się na werdykcie i usterce przebiegu, która podnosi wskaźnik tego badania (`skaner/strona.py` → usterki_przebiegu). Sprawa nie powstaje, więc wskaźnik strony liczony ze spraw się nie zmienia. Ten sam stan od środka zgłasza wtyczka jako `posture_php_eol` (gate=false, waga 1) — tylko statystyka.
| Kod | Finding | Severity | Pewność | Skutek | Finding / alarm | Waga → ocena | Co zrobić |
|---|---|---|---|---|---|---|---|
| B32.01 | PHP bez wsparcia bezpieczeństwa (widoczne z zewnątrz)outdated_php | Niska | — | usterka niekrytyczna | tak / — | waga 1 → ocena 2 (zielony) | — |
| Kod i klucz | B32.01 · outdated_php · w tabeli typów |
|---|---|
| Co znaczy | opis do opracowania |
| Kiedy powstaje | GET / (follow_redirects) i nagłówek X-Powered-By dopasowany do 'PHP/(\d+)\.(\d+)(?:\.(\d+))?'; bez dopasowania HEAD /wp-login.php; bez wersji w nagłówku (01.10: 14 z 265 stron ją ujawnia) drugie źródło to env.php_version z raportu wtyczki (strony_parametry.php_version). Finding, gdy dziś > data EOL gałęzi z tabeli PHP_EOL (7.4: 2022-11-28, 8.0: 2023-11-26, 8.1: 2025-12-31, 8.2: 2026-12-31). Gałąź spoza tabeli = po EOL tylko, gdy < 7.4.PHP_EOL :42-45, emisja :150-154. Brak nagłówka = nie_dalo_sie (brak_danych_w_odpowiedzi). |
| Severity · pewność | Niska |
| Skutek dla strony | usterka niekrytyczna · zakłada Finding |
| Waga → ocena | waga 1 → ocena 2 (zielony) |
| Klasyfikacja | CWE: CWE-1104 (Use of Unmaintained Third Party Components)OWASP Top 10:2025: A03:2025 Software Supply Chain FailuresOWASP ASVS 5.0.0: 15.2.1OCSF 1.9.0: Vulnerability Finding (class_uid 2002) |
| Rekord OCSF | finding_info.analytic.uid = "B32.01" · analytic.name = "outdated_php" · finding_info.types = ["B32 Wersja PHP i koniec wsparcia"] |
| Co zrobić | — |
| Wersje typu |
|
LOOP
bez pętliTrafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Ten parametr nie przeszedł jeszcze żadnej pętli. Kolejność po pierwszych pięciu grupach ustali miara trafności.