Monitoring kluczowych podstron
ważność wysokamierzonysposób key_pages
Sprawdzanie treści nie tylko strony głównej, ale też regulaminu, kontaktu i koszyka — tam podmiana przechodzi dziś niezauważona.
Wdrożony 01.10 (badanie profilem): kontakt, regulamin, polityka prywatności i koszyk z linków strony głównej — czy odpowiadają i czy nie mają wstrzyknięcia, którego nie ma na stronie głównej.
WIKI
artykuł z 16.09.2026 · źródeł 6Monitoring kluczowych podstron to parametr monitoringu stron internetowych, który sprawdza nie tylko stronę główną, lecz także wybraną listę podstron o szczególnej wadze, takich jak kontakt, regulamin, koszyk i kasa. Dla każdego adresu pomiar kończy się jednym z trzech wyników: bez zmian, zmiana względem wzorca albo nie dało się sprawdzić. Parametr dotyczy sytuacji, w której strona główna wygląda poprawnie, a zmieniona jest podstrona. MITRE ATT&CK opisuje podmianę treści (ang. defacement) jako modyfikację treści wizualnej, która narusza integralność pierwotnej zawartości [1].
Jak działa
Monitor pobiera kolejno adresy z listy i do każdego stosuje test: frazę kontrolną, porównanie z wzorcem albo listę skryptów. Same metody porównania omawia artykuł Weryfikacja treści. Przy wielu podstronach dochodzą trzy kwestie.
Koszt i częstotliwość. Liczba żądań rośnie jak iloczyn liczby stron, podstron na stronę i sprawdzeń na dobę. Wymaganie 11.6.1 standardu PCI DSS dla stron płatności przewiduje ocenę co najmniej raz w tygodniu albo z częstotliwością wynikającą z celowanej analizy ryzyka [2]. Wytyczne PCI SSC zaznaczają, że złośliwa zmiana może między sprawdzeniami pozostać niewykryta, dlatego tam, gdzie to wykonalne, zalecają monitorowanie częste lub ciągłe [2].
Strony z sesją. HTTP jest domyślnie bezstanowy, a ciasteczka pozwalają serwerowi pamiętać stan, na przykład zalogowanie i zawartość koszyka [5]. WooCommerce wymaga wyłączenia z pamięci podręcznej stron koszyka, kasy i konta klienta, bo pokazują informacje właściwe dla bieżącego klienta i jego koszyka [6]. Stan koszyka śledzą ciasteczka, między innymi woocommerce_cart_hash, a wp_woocommerce_session_ przechowuje identyfikator klienta przez 2 dni [6]. Sonda bez sesji zobaczy pusty koszyk, a porównanie całej treści takiej strony między pobraniami nie ma sensu. Stabilniejsze są skrypty i nagłówki: wymaganie 11.6.1 dotyczy nagłówków HTTP wpływających na bezpieczeństwo i skryptów strony płatności w postaci, w jakiej otrzymuje je przeglądarka klienta [2].
Dane. Pomiar wymaga listy adresów dla każdej strony, wzorca dla każdego adresu i spisu dozwolonych skryptów. Wymaganie 6.4.3 przewiduje spis wszystkich skryptów strony płatności z uzasadnieniem każdego; w prostym środowisku może to być arkusz kalkulacyjny [2].
Standardy i specyfikacje
- MITRE ATT&CK T1491 dzieli podmianę treści na wewnętrzną (T1491.001) i zewnętrzną (T1491.002); jako sposób wykrywania wskazuje obserwację nieautoryzowanych zmian plików i wstrzykniętych skryptów [1].
- PCI DSS v4.0, wydany w 2022 roku, wprowadził wymagania 6.4.3 i 11.6.1, które mają zapobiegać nieautoryzowanym skryptom i je wykrywać [2]. Wymaganie 6.4.3 obejmuje autoryzację, integralność oraz spis skryptów z uzasadnieniem [2].
- Wymaganie 11.6.1 każe alarmować, gdy nagłówek lub skrypt pojawi się, zmieni albo zniknie, na przykład gdy dojdzie nowy plik
.jslub usunięta zostanie dyrektywa CSP [2].
Zagrożenia i skutki
Web skimming. E-skimming polega na wstrzyknięciu na stronę złośliwego kodu, który przechwytuje dane kart płatniczych lub dane osobowe [4]. Magecart to zbiorcza nazwa grup przestępczych prowadzących takie ataki, aktywnych od 2015 roku [3]. Napastnicy uzyskują dostęp do sklepu albo do bibliotek dostawców, a kod przechwytuje dane wpisywane przy zakupie [3]. Wytyczne PCI SSC wiążą wzrost liczby takich ataków z rosnącym użyciem zewnętrznych skryptów [2]; ryzyko skryptów z cudzych domen opisuje artykuł Skrypty z domen wygasłych.
Skimming cichy i z podwójnym wpisem. W cichym wariancie transakcja przebiega normalnie, więc atak może długo pozostać niewykryty [2]. W wariancie podwójnym fałszywy formularz poprzedza właściwy, klient wpisuje dane dwa razy, a atak bywa szybciej zauważany [2].
Podmiana podstrony. Zmiana treści może ominąć stronę główną; pokrewne objawy włamań opisuje artykuł Infekcja.
Fałszywe alarmy. Koszyk i konto klienta pokazują treść zależną od klienta [6], więc różnice między pobraniami są tam normalne.
Przykłady
| Podstrona | Co może się zmienić | Co sprawdzać |
|---|---|---|
| Kasa, cichy skimming [2] | nowy lub zmieniony skrypt [2] | lista skryptów i nagłówków [2] |
| Kasa, podwójny wpis [2] | fałszywy formularz przed właściwym [2] | liczba i adresy formularzy |
| Koszyk [6] | treść zależna od klienta [6] | skrypty, nie cała treść |
| Konto klienta [5] | stan zalogowania w ciasteczku [5] | odpowiedź bez sesji |
| Regulamin, kontakt | podmieniona treść [1] | fraza kontrolna |
- [1] Defacement (T1491) · MITRE ATT&CK
- [2] Information Supplement: Payment Page Security and Preventing E-Skimming — Guidance for PCI DSS Requirements 6.4.3 and 11.6.1 (v1.0, March 2025) · PCI Security Standards Council
- [3] Online Skimming and Payment Security · PCI Security Standards Council
- [4] FBI Releases Article on Defending Against E-Skimming · CISA
- [5] Using HTTP cookies · MDN Web Docs
- [6] How to configure caching plugins for WooCommerce · WooCommerce
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 „key_pages”. 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ść | SEO · wysoka (S08) |
|---|---|
| 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 key_pages · CREATO_PING/helpers/site_pages_check.py |
| Testy |
|
| Typ wyniku | ok z mapą podstron (rodzaj → adres, kod HTTP, sygnatury); 0–2 ustalenia: key_page_unavailable, key_page_tampered; nie_dalo_sie_sprawdzic (`brak_kluczowych_podstron`, `zrodlo_nie_odpowiada`, `blokada`) |
| Jednostka | brak — wynik jakościowy (kod HTTP i lista sygnatur dla każdej kluczowej podstrony) |
| Próg i reguła | Reguła: kluczowa podstrona 404/410/5xx = key_page_unavailable (normalna, warning); sygnatura wstrzyknięcia tylko na podstronie = key_page_tampered (wysoka, niepewna, do weryfikacji). |
| Gdzie leżą pokrętła | CREATO_PING/helpers/site_pages_check.py → KEY_PAGE_KINDS, key_page_links, injection_signatures, key_pages (:282)CREATO_PING/helpers/infection_check.py → detect_same_origin_loader, detect_socgholish, detect_etherhiding, detect_base64_eval, detect_seo_spamCREATO_PING/config/incident_policy.toml → [finding] key_page_unavailable, key_page_tampered |
| 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/site_pages_check.py · CREATO_PING/helpers/security_testy.py · CREATO_PING/skaner/scenariusze/premium_pelny.toml · CREATO_PING/skaner/scenariusze/tani_ciezki.toml · CREATO_PING/skaner/scenariusze/tani_lekki.toml · CREATO_PING/config/incident_policy.toml · CREATO_PING/skaner/usterki.toml · odczyt 01.10.2026 |
key_page_unavailable: bramka polityki otwarta (gate=true) → sprawa w skanerze → Kluczowa podstrona nie działa (kontakt, regulamin, polityka, koszyk) — waga 2 → ocena 3–4 (niebieski), status strony „niski”, dopóki sprawa jest otwarta. key_page_tampered: bramka polityki otwarta (gate=true) → sprawa w skanerze → Ślad wstrzyknięcia na kluczowej podstronie — do rozstrzygnięcia — waga 3 → ocena 5–6 (żółty), status strony „sredni”, 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.
| Kod | Finding | Severity | Pewność | Skutek | Finding / alarm | Waga → ocena | Co zrobić |
|---|---|---|---|---|---|---|---|
| S08.01 | Kluczowa podstrona nie działakey_page_unavailable | Średnia | Ewidentne | usterka niekrytyczna | tak / nie | waga 2 → ocena 3–4 (niebieski) | Przywróć podstronę albo popraw link w menu. |
| S08.02 | Ślad wstrzyknięcia na kluczowej podstroniekey_page_tampered | Wysoka | Niepewne | do weryfikacji | tak / nie | waga 3 → ocena 5–6 (żółty) | Sprawdź treść podstrony i pliki motywu; potwierdzone wstrzyknięcie = procedura infekcji. |
| Kod i klucz | S08.01 · key_page_unavailable · w tabeli typów |
|---|---|
| Co znaczy | Kontakt, regulamin, polityka prywatności albo koszyk linkowane ze strony głównej dają 404/410/5xx — strona główna działa, a klient nie dotrze do formularza ani do zasad. |
| Kiedy powstaje | Check key_pages (badanie kohort, tura strony, od 01.10): pierwszy link strony głównej do tej samej domeny ze ścieżką kontakt/contact, regulamin/terms, polityka-prywatnosci/privacy, koszyk/cart. Finding, gdy podstrona odpowiada 404, 410 albo 5xx. Brak takich linków = nie_dalo_sie (brak_kluczowych_podstron); 401/403/429/503 = blokada, bez Findingu. |
| Severity · pewność | Średnia · Ewidentne |
| Skutek dla strony | usterka niekrytyczna · zakłada Finding · alarm nie |
| Waga → ocena | waga 2 → ocena 3–4 (niebieski) |
| Klasyfikacja | OCSF 1.9.0: poza klasami Findingu |
| Rekord OCSF | finding_info.analytic.uid = "S08.01" · analytic.name = "key_page_unavailable" · finding_info.types = ["S08 Monitoring kluczowych podstron"] |
| Co zrobić | Przywróć podstronę albo popraw link w menu. |
| Wersje typu |
|
| Kod i klucz | S08.02 · key_page_tampered · w tabeli typów |
|---|---|
| Co znaczy | Sygnatura wstrzyknięcia (loader, SocGholish, EtherHiding, eval(atob), SEO spam) na kontakcie, regulaminie, polityce albo koszyku — a na stronie głównej jej nie ma, więc parametr infekcji jej nie widzi. |
| Kiedy powstaje | Check key_pages: na kluczowej podstronie (jak key_page_unavailable) z kodem < 400 trafiona mocna sygnatura wstrzyknięcia z infection_check (same-origin loader, SocGholish, EtherHiding, eval(atob), SEO spam), której nie ma na stronie głównej — tę zgłasza już B06/B35/B36. Heurystyki z fałszywymi alarmami (obce skrypty, ukryte ramki) pominięte. |
| Severity · pewność | Wysoka · Niepewne |
| Skutek dla strony | do weryfikacji · zakłada Finding · alarm nie |
| Waga → ocena | waga 3 → ocena 5–6 (żółty) |
| Klasyfikacja | CWE: CWE-506 (Embedded Malicious Code)OWASP Top 10:2025: A08:2025 Software or Data Integrity FailuresMITRE ATT&CK 19.2: T1608.006 Stage Capabilities: SEO Poisoning (ślad)OCSF 1.9.0: Detection Finding (class_uid 2004) |
| Rekord OCSF | finding_info.analytic.uid = "S08.02" · analytic.name = "key_page_tampered" · finding_info.types = ["S08 Monitoring kluczowych podstron"] |
| Co zrobić | Sprawdź treść podstrony i pliki motywu; potwierdzone wstrzyknięcie = procedura infekcji. |
| 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.