Blog 24/7
ARK. B32Parametr monitoringuBezpieczeństwo · lista 87 parametrów

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ć”.

ARK. 1

WIKI

artykuł z 16.09.2026 · źródeł 9

Wersja 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].

RYS. 1.1Cykl życia gałęzi PHP

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].

RYS. 1.2Wersja z nagłówka i od środka

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

OdczytWniosek
X-Powered-By: PHP/8.3.xgałąź z poprawkami bezpieczeństwa do 31 grudnia 2027 r. [1]
X-Powered-By: PHP/8.2.xgałąź z poprawkami bezpieczeństwa tylko do 31 grudnia 2026 r. [1]
X-Powered-By: PHP/7.4.33ostatnie wydanie gałęzi 7.4, bez wsparcia od 2022 r. [2]
stara wersja z pakietu dystrybucjimożliwe poprawki przeniesione przez dystrybutora [7]
brak nagłówkawersja nieznana, nagłówek mógł zostać wyłączony [5] [6]
ostrzeżenie o PHP w kokpicie WordPressawersja uznana przez wordpress.org za nieakceptowalną [8]
TAB. 1.1Przypisy9
  1. [1] Supported Versions · The PHP Group
  2. [2] Unsupported Branches · The PHP Group
  3. [3] Requirements · WordPress.org
  4. [4] PHP versions in use — statystyki API (odczyt 2026-09-16) · WordPress.org
  5. [5] Description of core php.ini directives — expose_php · PHP Manual
  6. [6] HTTP Headers Cheat Sheet · OWASP
  7. [7] Backporting Security Fixes · Red Hat
  8. [8] misc.php — wp_check_php_version() (wordpress-develop, trunk) · WordPress
  9. [9] GHSA-3qgc-jrrr-25jv — Argument Injection in PHP-CGI (CVE-2024-4577) · PHP Group / GitHub
ARK. 2

STATS

wyniki z systemu · tylko liczby zbiorcze
TAB. 2.1Odczyty per strona—

Ten 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.

TAB. 2.3Ustalenia—

Ten parametr nie otworzył jeszcze żadnego ustalenia w bazie LAB247. Pusto nie znaczy „czysto” — znaczy, że nic nie przekroczyło reguły.

TAB. 2.4Przebiegi z tym sposobem sprawdzenia—

Harmonogram nie zapisał jeszcze przebiegu ze sposobem „php_wersja”. Zapis przebiegów z n8n działa od 2026-09-14.

ARK. 3

CARD

karta z kodu CREATO_PING, odczyt 01.10.2026

Jak 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.

RYS. 3.1Droga parametru przez system: Wersja PHP i koniec wsparcia
TAB. 3.1Pomiarpliki: 11
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 helpersposób php_wersja · CREATO_PING/helpers/higiena_check.py
Testy
  1. Tylko badanie kohort: tura „higiena” zestawów premium_pelny (premium co 12 h), tani_ciezki (dostęp co 24 h, priorytet co 48 h) i tani_lekki (bez priorytetu co 48 h), gdy sonda http dała ok; w rytmach p3 i p4 tego testu nie ma. Parasol `helpers/security_testy.py`, wspólny termin strony 60 s.
  2. GET https://domena/ z nagłówkami przeglądarki i z przekierowaniami (limit 8 s — TIMEOUT_S); wersja z nagłówka X-Powered-By wyrażeniem „PHP/X.Y[.Z]” (higiena_check.py:116–118). Bez wersji w nagłówku — HEAD /wp-login.php i ten sam nagłówek, bo część hostingów zostawia go tylko na plikach PHP wprost.
  3. Od 01.10 drugie źródło (commit 3c52a2f): gdy nagłówek milczy, wersja z raportu wtyczki monitorującej — `env.php_version` raportu wtyczki (`helpers/plugin_report_writer.py → format_v2_fields`) zapisane w `strony_parametry.php_version` bazy skanera, podawane do testu jako php_wtyczka (`skaner/strona.py:564`, `helpers/security_testy.py:302`). Nagłówek wygrywa; przy znanej wersji z wtyczki błąd sieci nie przerywa testu.
  4. Bez wersji w nagłówku i bez wersji z wtyczki = nie_dalo_sie_sprawdzic z przyczyną brak_danych_w_odpowiedzi (01.10: wersję w nagłówku ujawnia 14 z 265 stron); błąd sieci bez wersji z wtyczki = zrodlo_nie_odpowiada.
  5. Wersja porównana z tabelą PHP_EOL (higiena_check.py:43–46, stan 2026-09 z php.net): 7.4 → 2022-11-28, 8.0 → 2023-11-26, 8.1 → 2025-12-31, 8.2 → 2026-12-31, 8.3 → 2027-12-31, 8.4 → 2028-12-31, 8.5 → 2029-12-31. Gałąź spoza tabeli: starsza niż 7.4 = po końcu wsparcia, nowsza = wspierana.
Typ wynikuok 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`)
Jednostkawersja PHP (gałąź major.minor) i data końca wsparcia bezpieczeństwa; wynik jakościowy
Próg i regułaReguł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łaCREATO_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ówSurowy 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
  1. Nota polityki przy outdated_php mówi „z nagłówka X-Powered-By” — po zmianie z 01.10 wersja może pochodzić też z raportu wtyczki.
  2. Nagłówek czytany po przekierowaniach bez sprawdzenia kodu HTTP i hosta końcowego: po przekierowaniu na inny serwer wersja może dotyczyć cudzego serwera.
  3. Numer wydania to nie stan łatek: hosting z rozszerzonym wsparciem starych gałęzi PHP pokazuje stary numer przy łatanym kodzie — do potwierdzenia na portfolio.
  4. Tabela końca wsparcia jest stała w kodzie: gałąź nowsza niż 8.5 liczy się jako wspierana bez daty, dopóki ktoś nie dopisze wiersza.
kandydaci do pętli: kod a opis parametru albo specyfikacja
Karta przepisana zCREATO_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
TAB. 3.2Co oznacza failtypów Findingów: 1

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.

KodFindingSeverityPewnośćSkutekFinding / alarmWaga → ocenaCo zrobić
B32.01PHP bez wsparcia bezpieczeństwa (widoczne z zewnątrz)outdated_phpNiska—usterka niekrytycznatak / —waga 1 → ocena 2 (zielony)—
TAB. 3.3B32.01 · PHP bez wsparcia bezpieczeństwa (widoczne z zewnątrz)wersja 3 · 01.10.2026
Kod i kluczB32.01 · outdated_php · w tabeli typów
Co znaczyopis do opracowania
Kiedy powstajeGET / (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 stronyusterka niekrytyczna · zakłada Finding
Waga → ocenawaga 1 → ocena 2 (zielony)
KlasyfikacjaCWE: 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 OCSFfinding_info.analytic.uid = "B32.01" · analytic.name = "outdated_php" · finding_info.types = ["B32 Wersja PHP i koniec wsparcia"]
Co zrobić—
Wersje typu
  1. v1 · 01.10.2026 — kod B32.01 nadany (finding-codes.ts)
  2. v2 · 01.10.2026 — parametr z „zaplanowany” na wdrożony: sonda działa w profilach skanowania kohort (badanie), wyniki trafiają do LAB247 (doc/stan.md 2026-10-01 (6))
  3. v3 · 01.10.2026 — drugie źródło wersji PHP: gdy nagłówek X-Powered-By jest ukryty, wersja z migawki wtyczki (nagłówek z tej chwili wygrywa) (doc/stan.md 2026-10-01 (8))
ARK. 4

LOOP

bez pętli
RYS. 4.1Pętla parametru — sześć etapów
TAB. 4.1Trafność, 30 dnialarmy · prawdziwe · fałszywe · bez rozstrzygnięcia

Trafnoś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.

TAB. 4.2Pętle—

Ten parametr nie przeszedł jeszcze żadnej pętli. Kolejność po pierwszych pięciu grupach ustali miara trafności.

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com