Blog 24/7
ARK. 1System · Przewodniki

Jeden Skan strony, od Zlecenia skanu do subtaska.

Ten przewodnik prowadzi przez jeden Skan jednej strony i nazywa wszystko po drodze: który Check mierzy który parametr, jaki plik go wykonuje, co zostaje w zapisie i co z tego trafia do zadania w ClickUpie. Przykładem jest strona demonstracyjna sklep-demo.pl.

Strona podaje nazwy plików i modułów — to karta techniczna, nie opis procesu. Sam obieg opisuje Pętla doskonaląca, architekturę — Skaner, a pojedyncze pomiary — karty parametrów. Stan kodu z 22.09.2026, nazwy pojęć według słownika z 29.09.2026.

Kroków Skanu
10od Zlecenia skanu do zapisu
Checks Skanera
12z plikiem karta.toml 10
Parametrów
87mierzonych 87
Helperów w skanie
27bezpieczeństwo i wspólne
RYS. 1Zlecenie skanu → paczki → Check → Result → Result check → wskaźnik → zapisramka przerywana = nagrywane, nie wysyłane

Result jest niezmienny — nie nadpisujemy go nigdy, bo powtórka reguły na zapisanych pomiarach potrzebuje oryginału. Result check niesie wersję reguł, które go wydały; wskaźnik liczy się wyłącznie z usterek potwierdzonych, nie z tych w okresie łaski.

TAB. 1Dziesięć kroków jednego Skanu stronyplik przy każdym kroku
NrKrokPlikCo się dziejeCo zostaje
01Wejście: kto zleca skanskaner/cli_strona.py · skaner/api.py · skaner/harmonogram (kohorty.toml)Skrót „Skan strony”, panel albo harmonogram wołają jedno wejście: skanuj(domena, sondy, kto). Zlecenie skanu dostaje pole zrodlo — harmonogram albo ręczne.wiersz w tabeli `zlecenia` (stan: nowe) i pozycje strona × Check w kolejce
02Kolejka: pobranie Zlecenia skanuskaner/kolejka.py · skaner/worker.py::petlaWorker zagląda do kolejki co 5 s ([worker] odpytuj_s), bierze jedno Zlecenie skanu i przestawia je na w_toku. Dwa Zlecenia skanu naraz (rownolegle_zlecenia = 2), żeby skan bezpieczeństwa nie blokował dostępności.Zlecenie skanu w stanie `w_toku` z sygnaturą czasu i pulsem workera
03Grupowanie pozycji po Checkuskaner/worker.py::wykonaj (L213–216)Pozycje Zlecenia skanu lądują w słowniku „Check → lista stron”. Jeden Check = jedno uruchomienie helpera na paczce stron, nie na każdej z osobna.nic trwałego — układ pracy na czas Skanu
04Wybór trasy: plik karta.toml czy modułskaner/worker.py (L217–230) · skaner/limity.tomlWpis [bez_karty.<check>] wygrywa z plikiem karta.toml. Check bez pliku karta.toml i bez wpisu jest pomijany, a Zlecenie skanu dostaje uwagę i kończy się stanem blad.uwaga w dzienniku Zlecenia skanu, gdy Check nie ma żadnej trasy
05Izolacja i limity usług zewnętrznychskaner/worker.py::srodowisko, uwzglednij_limity · skaner/limity.tomlZ procesu helpera znikają zmienne z danymi dostępowymi (CLICKUP, LAB247, SMTP, N8N, MAIL…), stan idzie do katalogu cienia, a licznik na dobę pilnuje Safe Browsing (3000) i WPScan. Po limicie Check rusza bez usługi, z jawnym wpisem.wiersz w `limity_zuzycie` i ewentualny wpis „usługa pominięta: limit”
06Pomiar Checkiem z plikiem karta.tomlskaner/adapter.py::wykonaj_karte · sondy/<id>/karta.tomlWejście przycięte do pól z pliku karta.toml → walidacja (bledy_wejscia) → helper → walidacja wyjścia wobec schematu z pliku karta.toml. Wynik niezgodny z plikiem karta.toml to awaria Checku, nie wynik strony.Result z `wersja_sondy` = numer z pliku karta.toml, czas trwania, dowody
07Pomiar Checkiem bez pliku karta.tomlskaner/worker.py::uruchom_bez_karty · skaner/importuj.pyHelper uruchamiany dokładnie jak na produkcji, z CREATO_PING_ODCZYTY_DIR wskazującym katalog tymczasowy Zlecenia skanu. Jego plik JSONL worker importuje do bazy pod swoim Zleceniem skanu — ten sam kształt Resultu co w imporcie produkcji.Result z `wersja_sondy` = `helper:<sha>` (bez numeru wersji, bo bez pliku karta.toml)
08Klasyfikacja: Result → Result checkskaner/klasyfikacja.py · config/incident_policy.tomlCzysta funkcja bez skutków ubocznych: ten sam Result i te same reguły dają ten sam Result check. Przy każdym Result checku zapisywana jest wersja_regul — bez niej nie da się powtórzyć ani porównać.Result check na parę (Result, typ Findingu) ze skutkiem i wersją reguł
09Akcje i zapis w cieniuskaner/akcje.py · skaner/cien_clickup.py„Co bym zrobił” liczone z reguł akcji, a adapter ClickUp w cieniu buduje plan zapisu na najświeższej migawce listy Strony. Nic nie jest wysyłane; błąd cienia nie psuje Zlecenia skanu.plan w `zapisy_cienia` — materiał do porównania z tym, co zapisał writer
10Zapis: ClickUp i Results do LAB247skaner/produkcja.py::zapisz · skaner/adapter_clickup.pyTylko dla Zleceń skanu o źródle harmonogram (worker.py:210) i tylko w trybie produkcji. Zapis do ClickUp przepuszcza wyłącznie jawne SKANER_CLICKUP_ZAPIS=tak — bez tego Results idą do LAB247, a zapis jest nagrywany.wiersz w `zapisy_produkcji` (action_log, errors, transitions) + koperta Results dla LAB247
ok
ok pomiar się udał i wynik jest dobry
fail
fail pomiar się udał, a wynik jest zły — to otwiera Finding
timeout
timeout pomiar się nie udał w limicie czasu; nie znaczy „strona nie działa”
awaria Checku
awaria Checku wyjście niezgodne z plikiem karta.toml — problem nasz, nie strony; osobna kolejka do naprawy

Krok 10 rozstrzyga się na jednym warunku: ręczne Zlecenie skanu (skrót „Skan strony”, panel, wiersz poleceń) nigdy nie idzie do ClickUpa — zostaje podglądem. Do zapisu kwalifikuje się wyłącznie Zlecenie skanu o źródle „harmonogram”.

TAB. 2Checks z plikiem karta.toml10 · opis zgodny z kodem, pilnowany testem
CheckWersjaHelperCo mierzy · parametryLimitPaczka
tcp1.1.0helpers/tcp_check.pyCzy serwer przyjmuje połączenie TCP na porcie (domyślnie 443)tcp2,0 s50
dns1.0.0helpers/dns_check.pyCzy domena rozwiązuje się na rekord A i czy znany adres jest wśród odpowiedzidns2,0 s50
http1.0.0helpers/http_check.pyKod odpowiedzi GET po przekierowaniach (najwyżej 5)http-status5,0 s50
content1.0.0helpers/content_check.pyCzy strona zawiera oczekiwany fragment tekstu (dokładny podciąg, wielkość liter ma znaczenie)content5,0 s50
redirect1.0.0helpers/redirect_check.pyCzy http:// przekierowuje na https:// i ile przeskoków ma łańcuchhttp-https-redirect · redirect-chain7,0 s50
www_redirect1.0.0helpers/www_redirect.pyCzy obie formy adresu kończą na jednym hoście, a nie są dwiema wersjami stronywww-redirect7,0 s50
ttfb1.0.0helpers/ttfb_check.pyCzas do odpowiedzi z histerezą: porażka dopiero po serii wolnych pomiarówttfb10,0 s50
ssl1.1.0helpers/ssl_check.pyCertyfikat TLS na 443: data wygaśnięcia i zgodność nazwy domeny z SAN (zapas: CN)ssl-valid · ssl-days4,0 s50
partial_availability1.0.0helpers/partial_availability_check.pyCzy działa tylko jedna z form adresu, albo obie wyłącznie z pominięciem weryfikacji certyfikatussl-valid15,0 s50
exposure1.1.0helpers/exposure_check.pyCzy strona wystawia publicznie pliki i punkty wejścia ułatwiające atak (25 ścieżek)env-exposure · sensitive-files · htaccess-bak · xmlrpc · user-enum · git-exposure · readme · wp-cron · backup-exposure · sql-dump-exposure · dev-manifest · ds-store15,0 s4

Każdy Check z plikiem karta.toml ma go w sondy/<id>/karta.toml. Test helpers/tests/test_karty_sond.py wykonuje jego przypadki testowe bez sieci i pada, gdy plik karta.toml rozjedzie się z kodem: brak przypadku zapalającego, wynik spoza schematu, limit inny niż w konfiguracji, helper, którego nie ma.

TAB. 3Checks uruchamiane jak na produkcjiwpis w limitach wygrywa z plikiem karta.toml
CheckModułPaczkaLimitUsługi zewnętrzneUwaga
dnshelpers.dns_check50180 s—Ma też plik karta.toml, ale wpis w limitach wygrywa.
httphelpers.http_check50180 s—Jak wyżej.
contenthelpers.content_check50180 s—Jak wyżej.
redirecthelpers.redirect_check50180 s—Jak wyżej.
www_redirecthelpers.www_redirect50180 s—Jak wyżej.
ttfbhelpers.ttfb_check50180 s—Jak wyżej.
partial_availabilityhelpers.partial_availability_check50180 s—Jak wyżej.
security_pelnyhelpers.security_runner --level p3161800 ssafebrowsing, wpscanJeden proces, trzynaście sposobów sprawdzenia (TAB. 4). Paczka 16 stron — tyle samo, co workflow bezpieczeństwa w n8n.
security_p4helpers.security_runner --level p416900 ssafebrowsingSzybki Skan: tylko infekcja i Safe Browsing — ewidentne przejęcie widoczne z zewnątrz.

Siedem Checks dostępności ma jednocześnie plik karta.toml i wpis w limitach — wpis wygrywa. Plik karta.toml opisuje je i testuje, ale nie zmienia sposobu uruchamiania: przejście na trasę pliku karta.toml to świadome usunięcie wpisu, nie efekt uboczny.

TAB. 3aDwie trasy uruchomienia — co daje plik karta.tomlróżnica, której wpis w limitach nie ma
Czym się różniąTrasa pliku karta.tomlTrasa modułu
Kto rozstrzygasondy/<id>/karta.tomlskaner/limity.toml — sekcja [bez_karty.<check>]
Jak leci pomiarWejście przycięte do pól pliku karta.toml, walidacja wejścia, helper, walidacja WYJŚCIA wobec schematuHelper uruchamiany dokładnie tak, jak na produkcji — bez sprawdzania kształtu wyniku
Skąd bierze się ResultWprost do bazy skanera, bez pliku pośredniegoPlik JSONL w katalogu tymczasowym Zlecenia skanu, potem import do bazy
Wersja w zapisie ResultuNumer z pliku karta.toml — podbijany świadomie przy zmianie logikiSkrót pliku helpera — zmienia się sam przy każdej edycji
Wynik niezgodny z opisemAwaria Checku: osobny stan i osobna kolejka do naprawyNie do wykrycia — wchodzi do bazy jak każdy inny wynik

Obie trasy istnieją, bo Skaner przejął pomiary od poprzedniego układu stopniowo — przepisanie wszystkich Checks naraz groziłoby regresją na produkcji. Trasa pliku karta.toml daje jedno, czego druga nie ma: opis w pliku karta.toml, który da się sprawdzić testem. Check bez pliku karta.toml i bez wpisu w limitach jest pomijany, a Zlecenie skanu kończy się błędem — nie ma cichego przejścia.

TAB. 3bDlaczego Check nie ma pliku karta.tomltrzy różne powody, nie jeden
PowódKogo dotyczyNa czym polega
Kształt wynikunie do opisaniasecurity_pelny, security_p4Plik karta.toml dopuszcza dwa kształty: jeden wynik na domenę albo lista znalezisk. Jeden proces oddający wyniki trzynastu sposobów sprawdzenia naraz nie mieści się w żadnym z nich — plik karta.toml dostałby dopiero po rozbiciu na osobne Checks.
Budżet usługi zewnętrznejbrak polasecurity_pelny (Safe Browsing, WPScan)Check sięgający po usługę z limitem na dobę musi ten limit zadeklarować. Pole limit_zewn istnieje w pliku karta.toml, ale we wszystkich dziesięciu jest puste — licznik trzyma dziś skaner/limity.toml, nie plik karta.toml.
Wstrzymana migracjadecyzja7 Checks dostępnościdns · http · content · redirect · www_redirect · ttfb · partial_availability mają jednocześnie plik karta.toml i wpis w limitach. Plik karta.toml je opisuje i testuje, ale nie zmienia sposobu uruchamiania: przejście na trasę pliku karta.toml ma być decyzją (usunięciem wpisu), nie skutkiem ubocznym dopisania pliku.

Stąd wniosek, którego nie widać w samym zestawieniu Checks: trasą pliku karta.toml jadą dziś tylko trzy — połączenie TCP, certyfikat i wystawione pliki. Pozostałe siedem plików karta.toml jest napisanych i testowanych, ale nieużywanych do uruchamiania. To stan przejściowy, nie docelowy.

TAB. 4Co siedzi w środku jednego procesu bezpieczeństwa19 helperów, kolejność jak w kodzie
HelperCo robiPoziom
helpers/preflight.pyOdsiewa domeny bez rekordu A i strony w budowie, zanim ruszy jakikolwiek pomiarP3 i P4
helpers/html_fetch.pyJedno pobranie HTML współdzielone przez wszystkie sprawdzenia w paczce (BatchHtmlCache)P3 i P4
helpers/wp_fingerprint.pyWersja rdzenia WordPressa z nagłówków, znacznika generator i sum kontrolnychtylko P3
helpers/vuln_match.pyZestawienie wykrytych wtyczek i motywów z indeksem CVE (feed Wordfence)tylko P3
helpers/wpscan_lookup.pyRozstrzygnięcie wątpliwego dopasowania CVE — usługa zewnętrzna z twardym budżetemtylko P3
helpers/infection_check.pyZłośliwy skrypt, spam SEO, ukryta ramka, cloaking i bramki znanych kampaniiP3 i P4
helpers/safebrowsing.pyZapytanie do Google Web Risk: czy strona jest oflagowana jako phishing lub malwareP3 i P4
helpers/exposure_check.py25 ścieżek: .env, .git, kopie zapasowe, zrzuty bazy, xmlrpc, enumeracja użytkownikówtylko P3
helpers/indexability_check.pynoindex w znaczniku meta albo w nagłówku X-Robots-Tagtylko P3
helpers/sitemap_check.pyObecność mapy witryny i absurdalna liczba adresów w niejtylko P3
helpers/robots_check.pyDostępność robots.txt i blokada całego serwisutylko P3
helpers/security_headers.pySześć nagłówków ochronnych: HSTS, X-Frame-Options, nosniff, CSP, Referrer-Policy, Permissions-Policytylko P3
helpers/mixed_content.pyZasoby ładowane po HTTP na stronie HTTPStylko P3
helpers/seo_check.pyCanonical, tytuł strony i spójność linków wewnętrznych z HTTPStylko P3
helpers/ip_change.pyPorównanie adresu IP ze wzorcem z poprzedniego Skanutylko P3
helpers/dns_integrity_check.pyNS, MX, SPF i DMARC wobec wzorca — wykrywa zniknięcie rekordutylko P3
helpers/version_summary.pyZbiera wersje i podatności w jedno podsumowanie zamiast wpisu na każdą wtyczkętylko P3
helpers/wporg_versions.pyNajnowsze wydania wtyczek i motywów z katalogu WordPressa — odniesienie dla wersji na stronietylko P3
helpers/incident_policy.pyBramka: który Finding w ogóle idzie dalej (gate), z jakim skutkiem i wagąP3 i P4

Jedno wywołanie helpers/security_runner.py, jedno pobranie HTML na stronę, wiele sprawdzeń. Dlatego w zestawieniu Checks widać dwie pozycje, a w zapisie — kilkanaście Results z jednego Skanu. Plików jest 19, a sposobów sprawdzenia trzynaście: pięć pozycji to zaplecze — odsiew domen, wspólne pobranie HTML, bramka polityki, rozstrzyganie wątpliwych CVE i składanie podsumowania wersji.

TAB. 5Pliki, które pracują przy każdym pomiarzepoza samym Checkiem
PlikRola w Skanie
helpers/common.pyWspólny kształt wyniku, dziennik, wczytanie listy stron, emisja wyników
helpers/config.pyLimity czasu per rodzaj sprawdzenia i równoległość paczki — jedno miejsce dla wszystkich Checks
helpers/odczyty.pyZapis surowego wejścia i wyjścia każdego Checku do pliku JSONL
helpers/dowody.pyFragment, który zapalił Check — z maskowaniem wartości wrażliwych
helpers/network_block_check.pyRozróżnia „strona nie działa” od „hosting zablokował nasz adres”
helpers/wyjatki_falszywych_alarmow.pyWąski rejestr wyjątków: znane fałszywe alarmy nie otwierają Findingu
helpers/site_params.pyParametry strony i sprawdzenia krytyczne (okres łaski przed statusem DOWN)
helpers/checks_publish.pyKoperta Results dostępności wysyłana do bazy LAB247
TAB. 6Plik karta.toml, pole po poluprzykład: Check połączenia TCP
PoleWartość w przykładziePo co
[sonda] idtcpNazwa Checku; musi zgadzać się z nazwą katalogu
[sonda] wersja1.1.0Podbijana przy każdej zmianie logiki helpera — trafia do Resultu
[sonda] helperhelpers/tcp_check.pyPlik wykonujący pomiar; czytnik sprawdza, że istnieje
[sonda] check_typetcpKlucz limitu czasu i klucz w zapisie do ClickUp
[sonda] mierzyCzy serwer przyjmuje połączenie TCP na porcie (domyślnie 443)Jedno zdanie po polsku — co ten Check sprawdza
[sonda] parametry["tcp"]Identyfikatory parametrów z katalogu LAB247 — spina plik karta.toml z kartą parametru
[sonda] timeout_s2.0Limit pomiaru; twardy limit to timeout + 0,5 s
[sonda] rownoleglosc50Ile stron w paczce naraz
[logika] okPołączenie zestawione przed upływem 2,5 s; gniazdo od razu zamykaneKiedy wynik jest dobry — słowami, nie kodem
[logika] failDowolny wyjątek przy łączeniu (odmowa, brak trasy, błąd DNS)Kiedy wynik jest zły
[logika] timeoutPołączenie nie zestawione w 2,5 sKiedy pomiar się nie udał
[logika] notaSonda nie wysyła danych i nie weryfikuje TLS. Jest krytyczna: 1. porażka = okres łaski, 2. z rzędu = DOWNZastrzeżenia zakresu
[wejscie] wymagane["domain"]Pola, bez których Zlecenie skanu jest błędne
[wyjscie] ksztaltwynik_na_domeneJeden wynik na stronę albo lista znalezisk
[wyjscie] dowodpelnypelny · maskowany · tylko_skrot · brak — ile wolno zapisać z treści
[wyjscie] statusy["ok", "fail", "timeout"]Zamknięty zbiór stanów
[wyjscie] zapalajace["fail", "timeout"]Które stany otwierają Finding
[[przypadek]]3 przypadki testowe: połączenie ok · odmowa · zawieszeniePrzypadki testowe pliku karta.toml; musi być co najmniej jeden zapalający (kontrola pozytywna) i jeden ok

Plik karta.toml opisuje pomiar: co Check robi z siecią i jaki wynik wolno mu zwrócić. Karta parametru opisuje znaczenie: co ten pomiar znaczy dla właściciela strony. Spina je pole parametry w pliku karta.toml.

TAB. 7Karta parametru, pole po poluten sam parametr od strony znaczenia
PoleWartość w przykładziePo co
idtcpKotwica w dokumentacji: /wiedza/parametry#tcp
areaavailabilityObszar: dostępność · bezpieczeństwo · SEO
namePołączenie TCPNazwa po polsku, ta sama w panelu i w dokumentacji
descriptionCzy port 80/443 serwera odpowiada na połączenieCo to znaczy dla właściciela strony
importance55 krytyczna · 4 wysoka · 3 średnia · 2 niska
iconD01Klucz bitmapy ikony parametru
probetcpCheck, który ten parametr mierzy — spina z plikiem karta.toml
helpertcp_checkModuł wykonujący pomiar
workflowscreato_ping_avail_v2Który workflow n8n go zbiera
findings["tcp"]Findings, jakie ten parametr może otworzyć
measuredtrueCzy ktokolwiek dziś mierzy to na produkcji
planned—Znacznik parametru bez Checku: opisany, ale niemierzony
note—Zastrzeżenie zakresu albo luka — widoczne też w dymku ikony

Źródłem jest data/parameters.ts — jeden plik czytany przez dokumentację, dymek ikony, harmonogram i przegląd strony w panelu. Pełna plik karta.toml każdego parametru: katalog parametrów.

TAB. 8Skan strony: sklep-demo.plod Zlecenia skanu do wskaźnika
Co zleconoHarmonogram wystawia Zlecenie skanu na sklep-demo.pl z zestawem Checks dostępności (7) oraz security_pelny. Źródło: harmonogram, więc zapis do ClickUp jest w ogóle brany pod uwagę.
Ile pomiarówSiedem Checks dostępności daje 7 Results. security_pelny to jeden proces, ale w środku trzynaście sprawdzeń — każde zapisuje własny Result przez helpers/odczyty.py.
Co wyszłoexposure znajduje dostępne .git/HEAD, seo brak znacznika canonical, a vuln_match nie kończy się w limicie. Reszta na ok.
Result checksBramka polityki przepuszcza ekspozycję repozytorium (wystawiony plik) i brak canonical (higiena). Nieudany pomiar CVE dostaje skutek „nie dało się sprawdzić” — nie jest liczony jako niezaliczony Check.
Subtask 2 · Pomiarniezaliczone_testy: 2, nieudane_pomiary: 1, pod kreską dwie pozycje wypisane po jednej. Udane pomiary tylko jako liczba — inaczej lista rośnie o rzeczy bez treści.
Subtask 1 · PodsumowanieEkspozycja repozytorium ma wagę 3 → pasmo 5–6. Nasilenie nie zaskakuje (jedna usterka wagi dominującej, dwa obszary, zero usterek wagi 2), więc całkowita część to dolny punkt pasma: 5. Rozlanie dokłada 0,1 za drugi obszar — wskaźnik 5,1/10, kolor żółty (status sredni). Nieudany pomiar CVE ląduje w sekcji „czego nie zmierzyliśmy” i nie obniża wskaźnika.
Co naprawdę zostajeResults, Result checks, plan cienia i wiersz w zapisy_produkcji — wszystko w bazie Skanera. Z tego Skanu strony do ClickUpa nie idzie nic. Subtaski, które widać dziś na liście, pochodzą z ręcznej projekcji i noszą jeszcze stare nazwy.
TAB. 9Subtask 2 · Pomiar — suche wyniki Checkspowstaje pierwszy, bo zasila następny
KluczPrzykładSkąd się bierze
niezaliczone_testy2Result checks o skutku innym niż „brak problemu”, „bez subtaska” i nieudany pomiar
nieudane_pomiary1Skutki „nie dało się sprawdzić” i „bez oceny” — pomiaru nie było
informacyjne3Pomiar się udał, ale polityka nie robi z tego Findingu
udane_pomiary14Reszta — wyłącznie jako liczba, bez listy pozycji
ostatni_skan2026-09-22 04:12Czas najświeższego Resultu strony
skanow20Ile Results złożyło się na ten obraz

Pod kreską dwie listy: niezaliczone Checks i nieudane pomiary, po jednej pozycji na wiersz, bez komentarza. Udane pomiary zostają wyłącznie liczbą. Rozdział „niezaliczony” od „nieudany” robi jedna funkcja, żeby nazwa subtaska nie mówiła czegoś innego niż jego treść.

TAB. 10Subtask 1 · Podsumowanie — co z tego wynikawskaźnik i liczby, z których powstał
KluczPrzykładSkąd się bierze
wskaznik5,1/10Pasmo z wagi + nasilenie, a po przecinku rozlanie problemu
ocena5Liczba całkowita — kontrakt panelu LAB247
kolorżółtyPasmo wskaźnika → status listy Strony
usterka_dominujacaexposure_gitTyp najcięższej potwierdzonej usterki (waga 3)
liczba_usterek2Tylko potwierdzone; okres łaski się nie liczy
usterek_wagi_dominujacej1Próg nasilenia: ≥ 2 przesuwają wskaźnik na cięższy punkt pasma
obszarybezpieczeństwo, SEORozlanie: każdy obszar ponad pierwszy dokłada 0,1
pomiar_pelnytak„nie” → strona idzie na status „niezbadana”

Kolejność jest logiczna, nie czasowa: Pomiar to surowe wyniki Checks, a Podsumowanie liczy się z potwierdzonych usterek, więc bez pomiaru nie ma wskaźnika. Wagę usterki bierze katalog usterek atomowych: waga najcięższej wybiera pasmo (5 → 9–10, 4 → 7–8, 3 → 5–6, 2 → 3–4, 1 → 2), druga cyfra pochodzi z nasilenia. Bez sumowania — dziesięć drobiazgów to nadal 2/10.

TAB. 11Co naprawdę trafia do ClickUpatrzy warstwy, nie jedna
WarstwaKto to robiStan na dziś
Cień po każdym Zleceniu skanudziałaskaner/cien_clickup.pyPo każdym Zleceniu skanu worker buduje plan „co bym zapisał” na migawce listy Strony i odkłada go w bazie. ClickUp jest wyłącznie czytany.
Produkcja z harmonogramunagrywaskaner/produkcja.py::zapiszResults dostępności idą do bazy LAB247 naprawdę. Zapis do ClickUp jest wstrzymany decyzją właściciela z 19.09: bez SKANER_CLICKUP_ZAPIS=tak każde wywołanie jest tylko nagrywane w `zapisy_produkcji`.
Pięć ponumerowanych subtaskówręcznieskaner/prezentacja.py + tools/projekcja_clickup.pyKształt subtasków 1–5 liczy stan_docelowy. Na ścieżce workera go nie ma: wołają go panel LAB247 (wskaźnik strony) i narzędzie projekcji, domyślnie w suchym biegu. Wysyłka dopiero z przełącznikiem --zapisz.

Dlatego zdanie „skan zapisuje subtaski” jest dziś nieprawdziwe. Skan liczy, co zapisałby, i to odkłada. Wysyłkę odblokuje jawne ustawienie w środowisku usługi — z zasadą „brak zmiennej, literówka, cokolwiek innego = wstrzymane”.

TAB. 13Gdzie ląduje wynik, po koleisiedem miejsc w jednym Skanie strony
NrGdzieKto zapisujeCo tam trafiaKiedy
01<CREATO_PING_ODCZYTY_DIR>/<data UTC>/<id Checku>.jsonlhelpers/odczyty.pyJedna linia = jedna strona w jednym Checku: czas, Check, domena, wejście, wyjście, czas trwania, wersja kodu. Dopisywane jednym zapisem z blokadą pliku, bo dostępność i bezpieczeństwo piszą naraz. Linia ponad pół megabajta dostaje obcięte wyjście z jawnym znacznikiem.tylko Checks BEZ pliku karta.toml
02baza Skanera → tabela Results (odczyty)skaner/adapter.py:220 · skaner/importuj.py:117Kanoniczny zapis pomiaru: tu trafia wynik każdego Checku. Check z plikiem karta.toml pisze wprost po walidacji wyjścia, Check bez pliku karta.toml — przez import pliku z kroku 01. Wejście i wyjście leżą w kolumnach jako wartości, nie jako osobne pliki.zawsze
03baza Skanera → Result checks, akcjeskaner/klasyfikacja.py · skaner/akcje.pyResult check na parę (Result, typ Findingu) razem z wersją reguł, które go wydały, i plan „co bym zrobił”.zawsze
04katalog stanu cieniaworker.py::srodowiskoWzorce do porównań między Skanami: poprzedni adres IP, poprzednie rekordy poczty, passa wolnych pomiarów.zawsze
05baza Skanera → zapisy cienia i produkcjiskaner/cien_clickup.py · skaner/produkcja.pyPlan zapisu policzony na migawce listy stron oraz nagranie tego, co poszłoby do ClickUpa.zawsze
06skrzynka Results → skaner_z<numer>.jsonskaner/produkcja.py:165Paczka dla bazy LAB247, zapisywana w całości naraz. To już nie jest surowe wyjście Checku — rekord jest spłaszczany do tego, co baza przyjmuje, a odrzucone pozycje idą obok, z powodem. Skrzynkę opróżnia osobny timer; skaner nie zna hasła do bazy.tylko Zlecenie skanu z harmonogramu
07ClickUpskaner/adapter_clickup.pyBez jawnego przełącznika w środowisku usługi nie powstaje żaden zapis zdalny — wywołanie zostaje samym nagraniem z kroku 05.harmonogram + odblokowany zapis
Plik JSONL to tor jednej grupy Checks
Check z plikiem karta.toml go nie tworzy: adapter kasuje wskazanie katalogu Results ze środowiska jego procesu, a wynik idzie prosto do bazy.
Kanoniczny zapis pomiaru
Tabela Results w bazie Skanera — jedyne miejsce, w którym Skan strony zachowuje wynik KAŻDEGO Checku, niezależnie od trasy.
Wynik w kolumnie, nie w pliku
Wejście i wyjście Checku leżą w bazie jako wartości kolumn. Na dysku nie powstaje z nich osobny plik.

Kroki 01–05 dzieją się przy każdym Zleceniu skanu, także ręcznym. Kroki 06 i 07 wymagają Zlecenia skanu z harmonogramu, a sam 07 dodatkowo — jawnego odblokowania zapisu. Dlatego Skan uruchomiony skrótem zostawia pełny ślad w bazie Skanera i zero śladu poza nią.

TAB. 12Który parametr mierzy który Check87 z 87 · reszta bez Checku
ObszarParametrCheckHelperFindings, jakie otwiera
DPołączenie TCPtcptcp_checktcp
DRozwiązywanie DNSdnsdns_checkdns
DKod odpowiedzi HTTPhttphttp_checkhttp
DWeryfikacja treścicontentcontent_checkcontent
DPrzekierowanie HTTP → HTTPSredirectredirect_checkredirect
DPrzekierowanie www ↔ bez wwwwww_redirectwww_redirectwww_redirect, partial_availability
DDługość łańcucha przekierowańredirectredirect_check—
DPróg TTFBttfbttfb_checkttfb
DMonitoring zablokowany albo ślepymonitoring_blockdruga_opinia—
DFormularz i odnośniki kontaktowecontact_linkssite_pages_checkzepsuty_kontakt
BSSL: ważność certyfikatupartial_availabilitypartial_availability_checkssl
BSSL: dni do wygaśnięciasslssl_checkssl_expiry
BWygaśnięcie domenydomain_expirydomain_expirydomain_expiry
BGoogle Safe Browsingsafe_browsingsafebrowsinginfection_safe_browsing, safebrowsing_flagged
BEkspozycja .envexposureexposure_checkexposure_env, exposure_scan_unreliable
BWstrzyknięty skryptinfectioninfection_checkinfection_base64_eval, infection_same_origin_loader, infection_socgholish_gateway, infection_etherhiding
BLuki wtyczek i motywówvuln_matchvuln_matchvuln_cve
BWersja WordPressawp_fingerprintwp_fingerprintwp_fingerprint, outdated_wp
BKopie wp-config.phpexposureexposure_checkexposure_wpconfig_bak, exposure_wpconfig_tilde
BEkspozycja .htaccess.bakexposureexposure_checkexposure_htaccess_bak
BDostępność xmlrpc.phpexposureexposure_checkexposure_xmlrpc
BREST API: enumeracja użytkownikówexposureexposure_checkexposure_users_enum, exposure_author_enum
BEkspozycja .git/HEADexposureexposure_checkexposure_git
BMixed contentmixed_contentmixed_contentmixed_content
BNagłówek HSTSsecurity_headerssecurity_headersmissing_hsts
BZmiana adresu IPip_changeip_changeip_changed
BDostępność readme.htmlexposureexposure_checkexposure_readme
BDostępność wp-cron.phpexposureexposure_checkexposure_wpcron
BX-Frame-Optionssecurity_headerssecurity_headersmissing_xframe
BX-Content-Type-Optionssecurity_headerssecurity_headersmissing_nosniff
BContent-Security-Policysecurity_headerssecurity_headersmissing_csp
BReferrer-Policysecurity_headerssecurity_headersmissing_referrer_policy
BPermissions-Policysecurity_headerssecurity_headersmissing_permissions_policy
BRekord SPFdns_integritydns_integrity_checkdns_spf_missing
BRekord DMARCdns_integritydns_integrity_checkdns_dmarc_missing
BZdjęcie SPF/DMARCdns_integritydns_integrity_checkdns_mail_auth_removed
BEkspozycja kopii zapasowychexposureexposure_checkexposure_backup_archive
BEkspozycja zrzutu bazyexposureexposure_checkexposure_sql_dump
BEkspozycja manifestów devexposureexposure_checkexposure_dev_manifest
BEkspozycja .DS_Storeexposureexposure_checkexposure_ds_store
BRekord DKIMdkimhigiena_check—
BWersja PHP i koniec wsparciaphp_wersjahigiena_checkoutdated_php
BWersja TLS i siła szyfrówtls_wersjehigiena_checktls_przestarzaly
BSkrypty z domen wygasłychskrypty_domenyhigiena_checkexposure_script_domain_unregistered
BCloaking i spam SEOinfectioninfection_checkinfection_cloaking, infection_seo_spam, bot_protection_detected
BObce skrypty i ukryte ramkiinfectioninfection_checkinfection_foreign_script, infection_hidden_iframe
BEkspozycja debug.logexposureexposure_checkexposure_debug_log
BListowanie katalogówexposureexposure_checkexposure_directory_listing
BEkspozycja phpinfoexposureexposure_checkexposure_phpinfo
BKonsola bazy danychexposureexposure_checkexposure_db_console
BWyciek ścieżek serwerapath_leaksite_pages_checkexposure_path_leak
BLuki rdzenia WordPressavuln_matchvuln_matchvuln_wp_core
BNieaktualne wtyczki i motywyvuln_matchvuln_matchoutdated_plugin, outdated_theme
BKoniec wsparcia CMScms_eolsite_pages_checkeol_cms
BZmiana rekordów NS i MXdns_integritydns_integrity_checkdns_ns_changed, dns_mx_changed
BOtwarta rejestracja kontexposureexposure_checkopen_registration
BWtyczka administracyjna niezweryfikowanaunverified_admin_pluginagenci_aiwtyczka_administracyjna_niezweryfikowana
BSkan infekcji nierozstrzygniętyinfectioninfection_checkinfection_scan_unknown
SIndeksowalnośćindexabilityindexability_checknoindex
SSitemap.xmlsitemapsitemap_checksitemap_absurd_url_count
SSpójność HTTP → HTTPSseoseo_checkseo_http_https_mismatch
SCanonical URLseoseo_checkseo_canonical_missing
Srobots.txtrobotsrobots_checkrobots_block_all, robots_missing
STytuł stronyseoseo_checkseo_title_missing
SLiczba zaindeksowanych podstronindexed_pagesindexed_pagesindexed_pages_drop
SMonitoring kluczowych podstronkey_pagessite_pages_checkkey_page_unavailable, key_page_tampered
EKoszyk odpowiadasklep_koszyksklep_checksklep_koszyk_nie_dziala
EKasa działasklep_kasasklep_checksklep_kasa_nie_dziala, sklep_brak_platnosci
EObcy skrypt na stronie kasysklep_skrypty_kasysklep_checksklep_obcy_skrypt_kasy
ECisza zamówieńwc_orders_silenceagenci_aiwc_orders_silence
ENieudane płatnościwc_failed_paymentsagenci_aiwc_failed_payments
EZmiana metod płatnościsklep_platnoscisklep_checksklep_zmiana_platnosci
EMaile sklepu nie wychodząwc_mail_failedagenci_aiwc_mail_failed
EZaległe zadania sklepuwc_scheduler_overdueagenci_aiwc_scheduler_overdue
ENieaktualne szablony WooCommercewc_templates_outdatedagenci_aiwc_templates_outdated
EZamówienie testoweshop_test_ordersklep_checkshop_test_order_failed
WCzas pojawienia się treści (LCP)wydajnosc_lcpwydajnosc_badaniewydajnosc_lcp
WSkakanie układu (CLS)wydajnosc_clswydajnosc_badaniewydajnosc_cls
WBlokowanie przez skrypty (TBT)wydajnosc_tbtwydajnosc_badaniewydajnosc_tbt
WRealni użytkownicy (CrUX)wydajnosc_cruxwydajnosc_badaniewydajnosc_crux
WNagłe pogorszeniewydajnosc_trendwydajnosc_badaniewydajnosc_pogorszenie
WWaga stronywydajnosc_wagawydajnosc_badaniewydajnosc_ciezka_strona
WKluczowe podstronywydajnosc_podstronywydajnosc_badaniewydajnosc_podstrony
WKompresjawydajnosc_kompresjawydajnosc_serwerwydajnosc_brak_kompresji
WCache stronywydajnosc_cache_stronywydajnosc_serwerwydajnosc_brak_cache_strony
WHTTP/2 i cache plikówwydajnosc_http2_cachewydajnosc_serwerwydajnosc_brak_http2, wydajnosc_krotki_cache_plikow
WOcena wydajnościwydajnosc_wynikwydajnosc_pasmowydajnosc_zla, wydajnosc_slaba
D
Czy strona żyje, odpowiada i pokazuje właściwą treść.
B
Certyfikaty, infekcje, wystawione pliki, podatności, nagłówki.
S
Czy Google widzi stronę tak, jak powinien.
Kreska w kolumnie Check
Parametr opisany, ale nikt go dziś nie mierzy — takich jest 0. Powód stoi w karcie parametru.

Jeden Check obsługuje wiele parametrów: sprawdzenie wystawionych plików zbiera dwanaście, nagłówki ochronne — sześć. Dlatego Checks jest 12, sposobów sprawdzenia 55, a parametrów 87.

Blog 24/7
06.11QNAP potwierdza włamania na serwery NAS przez luki Plex2Shell w Plex Media Serverbleepingcomputer.com06.11CBZC ostrzega: co najmniej 10 ataków na sklepowe systemy chłodnicze w Polscespidersweb.pl06.11Abnormal AI: 53% firm nie ma wzorca normalnego zachowania agentów AIcybersecuritydive.com06.11Claude Enterprise dostaje centrum bezpieczeństwa i inference hooks do narzędzi DLPsecurityweek.com06.11KAMSOFT ZSIRep akceptowała każdy certyfikat HTTPS, poprawka w wersji 2.12.3.1cert.pl06.11Atak na sterowniki chłodnicze Danfoss uszkodził towar w około 700 sklepach we Francjidarkreading.com06.11Złośliwe rozszerzenie przeglądarki może uruchomić kod przez asystenta AI na komputerzethehackernews.com06.11Paint: poprawka CVE-2026-83844 tylko przez Microsoft Store, nie przez Windows Updatethehackernews.com06.11D-Link ostrzega przed niezałatanymi lukami w przełącznikach DGS-3130bleepingcomputer.com06.11Cyberatak na Ahold Delhaize obetnie sprzedaż w IV kwartale o 200-250 mln eurosecurityweek.com