Skip to content

5 Collaudo DevTools

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

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

Il collaudo e la manutenzione del motore Panzer v7 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.3) Innesco Operativo
📦🛡️ SW: Risorsa validata e salvata: ${targetUrl} Successo cache.
🛡️ SW: Risorsa estratta dal Bunker: ${url} Decrittazione in RAM.
⚠️ 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` / `VAULT_EMPTY_TEMPORARY` (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.
Esegue una 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
🔹 Verifica la reazione del sistema se la chiave master 🔑 viene rimossa dal disco.

🔹 Nei DevTools, vai su Application -> IndexedDB -> `PWA_Vault` -> `keys`.

🔹 Seleziona il record della riga `master_key` e premi il tasto Canc sulla tastiera per eliminarlo.

🔹 Spostati su Service Workers, clicca su Stop per scaricare la RAM, e ricarica la pagina con `F5`.

🔹 Risultato atteso:
Al riavvio, il sistema rileva l'assenza della chiave 🔑(`VAULT_EMPTY_TEMPORARY`), attiva all'istante la purga e pialla completamente il Cache Storage. 🧹
🔹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

🗂️ Indice Rapido Wiki


LOGO

Clone this wiki locally