Skip to content

5 Collaudo DevTools

Valentino Aglianó edited this page Jun 11, 2026 · 28 revisions

🔥 Capitolo 4: La Prova del Battesimo di Fuoco (Debug & Log)

Il collaudo e la manutenzione del motore 🪖 Panzer v7.5 all'interno delle infrastrutture della Pubblica Amministrazione richiedono un monitoraggio rigoroso tramite la console dei moduli di sviluppo del browser (F12 / DevTools) applicando un approccio Zero Trust.

Warning

➡️ Falsi Positivi in Debug: Quando i DevTools di Chrome sono aperti con l'opzione "Disable cache" attiva, il Service Worker potrebbe ignorare le logiche di caching del Bunker Mode. Disattiva l'opzione per i test reali offline.

⚠️ Configurazione: getNetworkProfile richiede monitoraggio RTT. Non disabilitare le API di rete.

Caution

🛑 Variabile [ encryptionKey ]: non portare nel codice questa variabile a null altrimenti scattano le protezioni...


📊 Tassonomia dei Log di Logistica e Storage

  • Durante le sessioni di ispezione attiva, l'operatore tecnico deve fare riferimento alla seguente mappatura semantica delle stringhe generate nativamente dal Service Worker nei log di console:
🔹📄 Log
Alcuni esempi di Log di Console (SW Panzer v7+) Innesco Operativo
📦🛡️ SW: Risorsa validata e salvata: ${targetUrl} Successo cache.
💾🛡️ SW: Risorsa estratta dal, ${targetCache} Decrittazione in RAM.
🛡️🧹 SW: Bonifica RAM eseguita per: ${finalPath} fill(0) anti Memory ispection
⚠️ SW Security: Firma fallita per ${url} Errore firma.
📄❌ SW: Fallimento validazione/download su: ${url} Violazione soglie/dimensioni.
🌐❌ SW: Offline in ${mode} (Profilo: ${profileName}) Stato resilienza.
🔄 SW: Background Sync avviato... Sincronizzazione async.
🚨 SW: Storage Pieno! - Emergency Clean... Gestione QuotaExceeded.
⚠️ SW: ErrorPage B64 Not Blob... Errore fallback grafico.
🗄️🚨 SW: COMPROMISSIONE RILEVATA! ACTIVATION_ABORTED_SECURITY_BREACH Purga atomica.
🗄️🔥 SW: Tabula rasa completata con successo. Risultato della Purga atomica.
⚠️💣 ANOMALIA CRITICA: Vault compromesso, chiave sparita! DB presente ma chiave assente...
❌🛡️ SW: Errore durante la cifratura del file. Errore di Cifratura con (throw err).per il chiamante try/catch
❌🛡️ SW: Fallimento decrittazione. Dati non integri o chiave errata. throw new Error("VAULT_LOCKED_DECRYPTION", { cause: err }.
📜📦 SW: TTL Scaduto, Del: ${request.url} Pulizia dei dati non cifrati ogni X giorni.
🧹 SW: UserCache svuotata, recupera spazio critico. Usata quado interviene: QuotaExceeded
🔑 SW: Primo avvio, inizializzazione chiave. Creazione Della Key_master.
🛡️🔍 SW: Check di Sicurezza... Avvio Controllo di Integrità sulla Key_master .
🛡️✅ SW: Integrità Bunker confermata. Controllo di Integrità sulla Key_master, Riscontro negativo di Manipolazione/Corruzione.
🌐👮‍♂️ SW: Rete Degradata, [ ${profileName} ].\n SWR(Stale-While-Revalidate), ON per continuità operativa... profili di rete degradati Low & VeryLow forzati ad usare SWR come strategia di resilienza...

📦 Identificazione dei Magazzini di Memoria

🔹📦🛡️ (Bunker), (mappato in `CONFIG.cacheName`)
Indica operazioni di lettura, scrittura o ripristino di un asset di sistema core.

🔹 Questa zona è protetta da cifratura hardware-assisted AES-GCM 🔑, isolata e vitale per il funzionamento offline.

🔹 Il frontend riceve queste risorse marchiate dall'header personalizzato:
`X-PWA-Source: Bunker-Decrypted`
🔹📦🔓 (Magazzino), (mappato in `CONFIG.userCacheName`)
🔹 Indica la gestione delle risorse utente sussidiarie. È un'area di storage dinamica, volatile, non cifrata e sacrificabile in caso di emergenza, vincolata al ciclo di vita di `CONFIG.userCacheTTL`.

🚨 Protocollo di Emergenza e Purga

  • In presenza di anomalie hardware o tentativi di manipolazione (es. iniezione di chiavi corrotte), il motore esegue il protocollo distruttivo definito nel diagramma sottostante:
🔹Scattato `QuotaExceededError` (Memoria Piena)
🔹 Causa: Il dispositivo client ha esaurito lo spazio disco. Durante il download o la cifratura degli asset pesanti la scrittura fallisce.

🔹 Azione: Poiché il test del canarino eseguito all'avvio in RAM ha già dovuto convalidare l'integrità del Vault, il sistema interrompe la sincronizzazione in modo pulito.

🔹 Nessuna purga viene avviata, preservando l'integrità dei file già archiviati.
🔹🗄️🚨💣 `VAULT_SECURITY_BREACH_INTEGRITY` (Purga Atomica)
🔹 Causa: Rilevata alterazione strutturale dei byte della chiave master, fallimento del test crittografico di decrittazione sul Canary Data, oppure totale e inspiegabile assenza del record della chiave da IndexedDB a Service Worker già inizializzato.

🔹 Azione del software (Tabula Rasa & Reset): Il Service Worker attiva il protocollo distruttivo immediato:
Cancellazione radicale di tutte le cache (`CONFIG.cacheName` e `CONFIG.userCacheName`), rasa al suolo l'intera struttura di IndexedDB (`PWA_Vault`), azzera le variabili in RAM ed emette un segnale broadcast.
sequenceDiagram
    participant SW as ⚙️ Guardiano (SW)
    participant CA as 💾 Magazzino (Cache)
    participant DB as 🗄️ Caveau (DB)
    participant FE as 🖥️ Schermo (App)

    Note over SW: Rilevato pericolo/corruzione
    SW->>CA: 🧹 "Butta via tutto!"
    SW->>DB: 🧨 "Distruggi il caveau!"
    SW->>SW: 🧠 "Pulisci la memoria RAM"
    SW->>FE: 📢 "Ricarica tutto da zero!"
Loading
🔹🏗️⚙️ Effetto Nuova Installazione:
🔹 Il browser si ritrova davanti a una tabula rasa assoluta e avvia un ciclo di re-installazione ex-novo.

🔹 Se la comunicazione diretta con il frontend dovesse fallire durante la crisi, l'effetto si concretizza in modo deterministico alla primissima riapertura o aggiornamento manuale dell'applicazione da parte dell'utente, costringendo il sistema a ripartire da uno stato nativo pulito e a riscaricare tutti gli asset core integri direttamente dal server d'origine.

🔹 Nel caso limite in cui la rete sia totalmente assente e il re-fetch fallisca, il motore si isolerà definitivamente nello stato logico protetto `VAULT_LOCKED_NO_KEY`, dirottando l'erogazione verso `CONFIG.fallbackImage` o stampando la pagina d'emergenza HTML 503.

🛠️ Protocollo di Collaudo Operativo

  • Chiunque può testare la reattività e l'affidabilità del sistema seguendo questa batteria di test guidati direttamente dai DevTools del browser.
🔹1. 🏋️‍♂️ Test di Stabilità Asincrona (Cold Start)
🔹 Verifica che il riavvio forzato del motore non provochi perdite di dati o falsi positivi.

🔹 Apri i DevTools (`F12`) -> scheda Application -> Service Workers.

🔹 Clicca sul pulsante Stop (il pallino verde diventerà bianco, svuotando la RAM del Worker).

🔹 Torna sulla pagina e premi `F5` per ricaricare.

🔹 Risultato atteso:
Il Service Worker si riavvia, rileva `lastVaultCheck = 0`, esegue immediatamente `deepVaultValidation()`, estrae la 🔑 chiave intatta dal disco e convalida il canarino.
L'applicazione si avvia normalmente senza alcun errore crittografico.
🔹2. ⚠️📦 Test di Isolamento per Spazio Pieno (Quota Exceeded)
🔹 Verifica che la saturazione della memoria non inneschi per errore la purga.

🔹 Nei DevTools, vai sulla scheda Application -> menu Storage (Archiviazione).

🔹 Spunta la casella "Simulate custom storage quota" e imposta il limite a 1 MB.

🔹 Svuota la cache e ricarica la pagina (`F5`) per forzare la sincronizzazione `performSync`.

🔹 Risultato atteso:
La scrittura dei file pesanti fallisce generando un'eccezione, ma la console mostra che il Vault è stato promosso come integro. Nessun log di purga compare, le vecchie cache non vengono toccate.
🔹3. 🗝️ Test di Violazione per Chiave Rimossa
🔹 Obiettivo Forense: Verificare la reazione autonoma del Service Worker in caso di 🔑❌💾 Rimozione dolosa della chiave master dal disco, escludendo matematicamente i falsi positivi causati da blocchi o rallentamenti hardware dell'I/O (Disk Throttle).

🔹 Procedura Operativa di Test:
1. Nei DevTools di Chrome, navigare nel pannello Application -> IndexedDB -> `PWA_Vault` -> `keys`.
2. Selezionare il record associato alla riga master_key e premere il tasto Canc sulla tastiera per eliminarlo fisicamente dal database locale.
3. Spostarsi nel pannello Service Workers, individuare il worker attivo del Panzer e cliccare su Stop per forzare il kill del processo e lo svuotamento totale della RAM volatile.
4. Ricaricare d'ufficio la pagina premendo il tasto `F5`.

🔹 Risultato Atteso:
Al boot, la funzione deepVaultValidation() fa scattare immediatamente una gara asincrona ad alta precisione (Promise.race) tra la query al database e la funzione waitTillIdle() dotata di 🎲 Jittering (Entropia Casuale tra 250ms e 600ms).

Il sistema isola lo stato in due scenari hardware mutuamente esclusivi:

🧱 SCENARIO A - FALSO POSITIVO (Disco Sotto Stress): Se l'I/O del computer è bloccato, la query rimane appesa. Lo Scudo Termico vince la gara e lancia il timeout. Il Panzer intercetta l'evento ed attiva il Bunker Shield (Blocco 403) per congelare la sessione a scopo cautelativo, MA NON esegue la purga, preservando l'integrità dei dati cifrati dell'utente.

💥 SCENARIO B - VERO ATTACCO: Poiché e stato rimosso solo il record a mano, il canale I/O è sano e risponde in una frazione di millisecondo, vincendo la gara contro il timeout. Il Panzer rileva che l'I/O è reattivo (isIOStable = true) ma la chiave è inequivocabilmente ASSENTE 🔑❌.

L'anomalia dolosa è confermata al 100%: il modulo devia istantaneamente il flusso ed esegue la 💣 Purga Atomica Immediata:
• Chiama d'urgenza la funzione Destroy_ALL_Caches("VAULT_COMPROMISED") 🧼🧹 piallando l'intero Cache Storage.
• Esegue il comando indexedDB.deleteDatabase("PWA_Vault") facendo tabula rasa strutturale del database.
• Stronca la sessione e renderizza a schermo l'errore di violazione telematica (HTTP 403 Forbidden).
🔹4. 🪱🔑 Test di Violazione per Chiave Corrotta (Iniezione di Codice)
🔹 Verifica la reazione se i byte della chiave vengono manipolati dall'esterno.
Poiché la chiave è protetta nativamente in sandbox hardware/software con `extractable: false`, per simulare la corruzione è necessario iniettare un Oggetto sostitutivo fasullo tramite console.

🔹 Nei DevTools, posizionati sulla scheda Console

🔹 Sblocco del Browser (Protezione Self-XSS):
Se la console blocca l'incolla, digita manualmente a schermo la stringa `consenti incolla` (o `allow pasting` se il browser è in inglese) e premi Invio.

🔹 Copia e incolla il seguente script d'iniezione e premi Invio:
let req = indexedDB.open("PWA_Vault", 1);
req.onsuccess = function(e) {
    let db = e.target.result;
    let tx = db.transaction("keys", "readwrite");
    let putReq = tx.objectStore("keys").put({ finta_chiave: "dati_corrotti_12345" }, "master_key");
    putReq.onsuccess = function() {
        console.log("🪱🔑🎯 Chiave corrotta iniettata con successo nel DB!");
        db.close();
    };
};

  • Per forzare la verifica delle routine di rete, si raccomanda di configurare il pannello Network dei DevTools emulando profili di connessione degradati (es. Fast 3G o Slow 3G).
  • Questo permette di validare visivamente il corretto funzionamento della routine getNetworkProfile, l'estrazione dei limiti da CONFIG.networkResilient.profiles e lo scatto automatico dei relativi timeout dinamici.

Tip

🌌🛡️ SIMULAZIONE DEL TOTAL BLACKOUT NEI TEST DI COLLAUDO:

🎚️ Nel pannello Application -> Service Workers dei DevTools, spunta la casella "Offline" e monitora i log.

Se il sistema è a regime, vedrai comparire esclusivamente stringhe con il marcatore 📦🛡️ [Bunker-Decrypted], a testimonianza del fatto che la PWA sta girando in Totale isolamento dal server e decifrando le risorse al volo via Web Crypto API.


↩ Torna alla Home

👈 🏛️ Perché la PA deve adottare l'Architettura Panzer v7

👉 🛡️ Capitolo 5:
Paradigma Difensivo Avanzato e Logiche di Autodifesa

🗂️ Indice Rapido Wiki


LOGO

Clone this wiki locally