Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
engagement-mgr — Engagement Manager è un'applicazione web per il monitoraggio delle attività di sicurezza offensiva. Presenta un'interfaccia utente moderna, realizzata con Next.js, Prisma e PostgreSQL. | Kitploit
Strumenti/GitHubGitHub/leebaird/engagement-mgr
Strumenti DifensiviAnalisi delle VulnerabilitàSicurezza WebPenetration TestingUtilità e FrameworkApprendimento e FormazioneRed TeamingRisposta agli Incidenti
GitHubleebaird/engagement-mgr

engagement-mgr

Engagement Manager è un'applicazione web per il monitoraggio delle attività di sicurezza offensiva. Presenta un'interfaccia utente moderna, realizzata con Next.js, Prisma e PostgreSQL.

24382 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Vedi Repository
Condividi

Engagement Manager

Engagement Manager è un'applicazione web per il monitoraggio delle attività di sicurezza offensiva. Presenta un'interfaccia utente moderna, costruita con Next.js, Prisma e PostgreSQL. L'app include un calendario, attività, clienti, contatti, risultati e operatori.

License: MIT

  • Twitter Follow Lee Baird @discoverscripts
  • Twitter Follow Jay "L1ghtn1ng" Townsend @jay_townsend1

Screenshots

Dashboard

Indice

  • Screenshots
  • Scrittura dei risultati e produzione di report PDF
    • Sicurezza del reporting e deployment
  • Verifica
  • Prerequisiti
  • Configurazione dell'ambiente
  • Configurazione del database
    • Sviluppo
    • Produzione
  • Installazione
    • Configurazione automatizzata (Ubuntu)
      • Note di aggiornamento per configurazione hardened e backup
    • Configurazione manuale
  • Esecuzione dell'applicazione
  • Deployment in produzione
    • Requisiti
    • Passaggi di deploy
    • Checklist di produzione
  • Credenziali predefinite
  • Migrazione del server (Backup / Ripristino / Reset)
  • Piano di implementazione e architettura
    • Stack tecnologico
    • Schema del database
    • Aggiunta di nuovi campi
    • Architettura di sicurezza
  • Scrittura dei risultati e produzione di report PDF

    • Area di lavoro per la scrittura: apri il link Write & review di un risultato per la modifica Markdown e un'anteprima sicura. Le bozze private vengono salvate dopo 15 secondi di inattività o su richiesta; sono memorizzate sul server, non nella memoria locale del browser. Recupera esplicitamente una bozza dopo la riapertura. I salvataggi in conflitto preservano il testo dell'editor e richiedono il confronto con la revisione corrente. Le revisioni del testo possono essere ispezionate e ripristinate; il ripristino non ripristina le prove eliminate.
    • Template riutilizzabili: cerca la formulazione approvata per titolo, categoria o gravità. Gli utenti possono proporre template; gli amministratori li curano e li approvano. L'applicazione di un template crea un risultato di engagement indipendente con osservazioni vuote, host interessati e prove, prevenendo il riutilizzo accidentale delle prove di un altro engagement.
    • Prove: carica o incolla fino a quattro immagini PNG/JPEG insieme, aggiungi didascalie e modifica didascalia/ordine nell'area di lavoro per la scrittura. Le immagini vengono decodificate, private dei metadati, ridimensionate a un massimo di 2000 × 2000 pixel e salvate come PNG. Conserva separatamente le prove forensi originali se sono richiesti i byte o i metadati originali.
    • Revisione: invia i risultati completi da Draft/Changes Requested a Ready. Un revisore assegnato o un amministratore, diverso dall'autore corrente, può approvare o richiedere modifiche. Gli amministratori assegnano i revisori. Le modifiche a testo, prove e revisioni ripristinate annullano l'approvazione. La coda di revisione, i commenti, la checklist di preparazione e la cronologia delle revisioni supportano il passaggio di consegne.
    • Report PDF: scegli un engagement in Reports, scrivi il suo riepilogo esecutivo, seleziona/ordina i risultati e salva le impostazioni. Le bozze PDF sono contrassegnate visibilmente. Solo gli amministratori possono emettere un PDF finale, e ogni risultato selezionato deve essere approvato e superare i controlli di preparazione. Ogni versione emessa memorizza il suo PDF, uno snapshot esplicito del contenuto e un digest SHA-256; le modifiche successive non lo rigenerano. L'eliminazione dell'engagement padre elimina comunque i suoi report attraverso il ciclo di vita esistente.
    • Importazioni da scanner: visualizza in anteprima un export, seleziona i risultati, quindi conferma. Le importazioni non eseguono mai scansioni né contattano i target. Il fingerprinting lato server salta i risultati corrispondenti nello stesso engagement; tutti i nuovi record iniziano come Draft e devono essere verificati da un operatore.
    Famiglia scanner/exportExport accettato
    Burp SuiteIssues XML, incluso il DTD dello schema interno inerte
    Nessus / TenableNessus v2 XML (.nessus)
    NmapXML; le porte aperte e il loro output degli script diventano osservazioni informative, non vulnerabilità dedotte
    OpenVAS / GreenboneReport XML nativo o GMP get_reports_response
    OWASP ZAPReport JSON tradizionale con siti e avvisi
    NucleiJSON Lines (-jsonl)
    QualysXML dei risultati di scansione (struttura SCAN/IP), non il formato separato dell'API di rilevamento host
    Semgrep / CodeQL e altri produttori SARIFEsecuzioni, regole e risultati SARIF JSON

    Gli export sono limitati a 2 MB e 500 risultati per importazione, con limiti di frequenza per utente per anteprima e conferma. L'applicazione accetta al massimo 10.000 risultati in totale e 500 per un singolo engagement tra creazione manuale, template e importazioni da scanner. L'elenco globale Findings carica 100 righe per pagina, e le query dei risultati di engagement/report sono limitate dallo stesso limite per engagement. I layout sconosciuti falliscono visibilmente invece di essere trattati silenziosamente come un'importazione riuscita. Le gravità degli scanner sono suggerimenti: rivedi il loro contesto prima dell'approvazione. Gli URL referenziati, l'HTML e le immagini remote incorporate non vengono recuperati né eseguiti.

    I report consentono 1–100 risultati, fino a 100 immagini di prove (5 MB ciascuna, 20 MB di input totale), 500 pagine e 25 MB di output. L'emissione è limitata a 50 versioni per engagement e 1 GB di PDF emessi in tutta l'applicazione. L'anteprima e l'emissione hanno limiti di frequenza per utente, e viene ammesso un solo rendering PDF per processo applicativo alla volta. I risultati conservano al massimo 1000 revisioni e 500 commenti; il raggiungimento di un limite fallisce senza sovrascrivere la cronologia. I font DejaVu e la loro licenza di ridistribuzione sono inclusi in assets/fonts; i deployment devono conservare queste risorse (il tracing dell'output di Next le include).

    Le Server Actions di Next.js condividono un unico limite di dimensione del corpo di 25mb (impostato in next.config.ts) per i caricamenti delle prove. Il login utilizza una route dedicata same-origin con codifica URL e un limite di streaming di 4 KB prima dell'autenticazione o delle operazioni sul database.

    Sicurezza del reporting e deployment

    Questo preserva l'esistente area di lavoro autenticata condivisa, non un nuovo modello di tenancy per cliente. Tutte le nuove pagine, azioni e download PDF verificano una sessione corrente supportata dal database. Le bozze sono limitate al loro proprietario; i permessi di revisione, approvazione dei template ed emissione sono applicati lato server. Le risposte PDF riservate sono private/no-store. I PDF finali contengono solo una allowlist esplicita di campi del report, mai bozze private, commenti di revisione o engagement non correlati.

    L'implementazione utilizza la checklist OWASP Top 10:2025: controlli di accesso (A01), risposte private e controlli CSP/CSRF esistenti (A02), dipendenze bloccate e CI (A03), protezioni esistenti di sessione/segreti più controlli di integrità dei report (A04/A08), Markdown/XML inerti e accesso al database parametrizzato (A05), elaborazione limitata e revisione indipendente (A06), controlli di sessione in tempo reale (A07), eventi di audit privi di contenuto (A09) e modifiche transazionali con pulizia in caso di errore (A10). Un digest rileva la corruzione accidentale; non è una firma digitale né una protezione da un amministratore del database. Questa non è una certificazione di conformità. La produzione richiede comunque HTTPS, archiviazione protetta di database/backup e monitoraggio operativo dell'output di audit.

    Prima di distribuire questo aggiornamento, esegui un normale backup dell'applicazione e applica le migrazioni additive 20260904221808_reporting_workflow e 20260906194500_add_revocable_sessions con npm run db:migrate, quindi rigenera Prisma Client e ricompila. I risultati esistenti iniziano come Draft alla versione 1, e i cookie del browser esistenti devono effettuare nuovamente l'accesso per ricevere un ID di sessione supportato dal server. Non reimpostare un database esistente. I backup includono le nuove tabelle e i PDF emessi attraverso l'export completo del database esistente.

    Verifica```bash

    npm test npm run lint npx tsc --noEmit --noUnusedLocals --noUnusedParameters npm run build npm audit

    root@kitploit:~
    `npm test` utilizza la modalità di test non isolata di Node con `tsx` in modo che i singoli casi di test TypeScript vengano eseguiti, invece di limitarsi a segnalare il successo del sottoprocesso del file. Mantieni visibili i totali espliciti delle asserzioni in CI.
    
    Le regressioni del database e del browser richiedono un **database locale dedicato denominato `reporting_tests`**, con le migrazioni applicate. Creano ed eliminano le proprie righe di fixture; non puntare mai questi test a un database applicativo. Imposta `REPORTING_TEST_DATABASE_URL` su quel database di test, quindi esegui:```bash
    DATABASE_URL="$REPORTING_TEST_DATABASE_URL" npx prisma migrate deploy
    npm run test:reporting
    npx playwright install chromium
    npm run test:browser
    

    La suite browser avvia un proprio server di sviluppo loopback sulla porta 3317 con un segreto di sessione riservato ai test; rifiuta di riutilizzare un server esistente. Impostare REPORTING_TEST_BROWSER su un eseguibile Chromium installato, se desiderato. Verifica la privacy delle bozze, le modifiche in conflitto, il caricamento delle prove, la revisione indipendente, i permessi/l'immutabilità dei PDF, la creazione di modelli senza JavaScript e le importazioni selettive deduplicate. I test di integrazione esercitano conflitti transazionali reali e rollback. Le suite non sostituiscono la verifica su LAN remota, Safari o distribuzione in produzione.

    Prerequisiti

    Questa applicazione è progettata per essere eseguita su Ubuntu e richiede quanto segue:```bash sudo apt update && sudo apt install -y nodejs npm postgresql postgresql-client postgresql-contrib zip

    root@kitploit:~
    `postgresql-client` fornisce `pg_dump`, `pg_restore` e `psql`; `zip` crea archivi di backup. L'estrazione del ripristino è gestita dall'applicazione con una rigorosa validazione delle voci e delle dimensioni.
    
    L'installazione dei pacchetti non sempre lascia PostgreSQL in esecuzione. Avvia e abilita il servizio prima di creare i ruoli o avviare l'app:```bash
    sudo systemctl enable --now postgresql
    sudo systemctl status postgresql --no-pager
    

    Se in seguito l'app fallisce con Can't reach database server at 127.0.0.1:5432, esegui sudo systemctl start postgresql e verifica con pg_isready -h 127.0.0.1 -p 5432.

    L'app richiede Node.js ^22.12.0 o >=24.0.0 (vedi engines in package.json). Se il pacchetto del sistema operativo è più vecchio, installa una release supportata da una fonte di pacchetti attendibile di cui verifichi le firme prima di eseguire setup.sh.

    Configurazione dell'ambiente

    Crea un file .env nella radice del progetto prima di eseguire Prisma o l'app:```bash cat > .env << 'EOF' DATABASE_URL="postgresql://em_admin:em_pass@localhost:5432/engagement_manager?schema=public" JWT_SECRET="replace-with-a-long-random-secret-at-least-32-characters" EOF chmod 600 .env

    root@kitploit:~
    | Variabile | Obbligatoria | Note |
    |----------|----------|-------|
    | `DATABASE_URL` | Sì | Stringa di connessione PostgreSQL. Prisma utilizza il parametro di query `schema=public`. Il backup e il ripristino utilizzano un file pgpass temporaneo accessibile solo al proprietario, in modo che la password non venga inserita negli argomenti del sottoprocesso. |
    | `JWT_SECRET` | Sì in produzione | Deve contenere almeno **32 caratteri**. L'app rifiuta di avviarsi in produzione senza di esso. La rotazione di questo valore invalida tutte le sessioni esistenti. |
    | `TRUST_PROXY` | No | Impostare a `1` (o `true`) solo quando l'app si trova dietro un reverse proxy che **sovrascrive** `X-Forwarded-For` / `X-Real-IP` e `X-Forwarded-Host`. I controlli dell'origine di login utilizzano `X-Forwarded-Host` quando presente in questa modalità; deve contenere un host pubblico, incluso un numero di porta non predefinito quando utilizzato. In caso contrario, il proxy deve preservare l'header `Host` pubblico. Questa è la topologia di produzione richiesta per limiti di login accurati per origine. Quando non impostato, gli header vengono ignorati per prevenire lo spoofing e il login utilizza un budget di fallback condiviso di un minuto più elevato, in modo che un client non possa imporre un blocco globale di 15 minuti. |
    | `ALLOWED_DEV_ORIGINS` | No | **Solo sviluppo.** Nomi host aggiuntivi autorizzati a caricare le risorse `/_next` (separati da virgola). Gli indirizzi IPv4 LAN correnti del server sono autorizzati automaticamente. Utilizzare questo per un nome DNS stabile. Le build di produzione ignorano questa impostazione. |
    
    Genera un secret robusto:```bash
    openssl rand -base64 32
    

    Configurazione del Database

    Assicurati che PostgreSQL sia in esecuzione prima (vedi Prerequisiti). Lo script automatico ./setup.sh avvia il servizio per te; i passaggi manuali seguenti presuppongono che sia già attivo.

    Sviluppo

    Esegui i seguenti comandi per creare il database PostgreSQL e l'utente:```bash sudo -u postgres createuser --pwprompt em_admin sudo -u postgres psql -c "ALTER USER em_admin CREATEDB;" sudo -u postgres createdb --owner=em_admin engagement_manager sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE engagement_manager TO em_admin;"

    root@kitploit:~
    ### Produzione
    
    Utilizza un utente database dedicato con **privilegi minimi** — non concedere `CREATEDB` o diritti di superutente:```bash
    sudo -u postgres createuser --pwprompt em_app
    sudo -u postgres createdb --owner=em_app engagement_manager
    

    Imposta DATABASE_URL per utilizzare em_app (o il nome utente scelto). Le migrazioni vengono eseguite come questo utente tramite npm run db:migrate.

    Nota: I file del database sono memorizzati nella directory dati di PostgreSQL (tipicamente /var/lib/postgresql/<version>/main/).

    Installazione

    Configurazione automatizzata (Ubuntu)

    Dalla radice del repository, esegui:```bash chmod +x setup.sh ./setup.sh

    root@kitploit:~
    Lo script installa i prerequisiti, avvia e abilita il servizio PostgreSQL, richiede un nome utente e una password per il database, scrive un file `.env` con `chmod 600`, crea il ruolo e il database PostgreSQL, applica le migrazioni e inizializza l'account amministratore predefinito. La modalità produzione completa anche `npm run build` e stampa solo il comando di avvio della produzione. Non installa Node.js da uno script shell remoto; installa prima una release supportata di Node.js.
    
    Per uso headless o CI:```bash
    sudo install -d -m 700 -o "$USER" /secure
    openssl rand -base64 24 > /secure/db-password
    chmod 600 /secure/db-password
    ./setup.sh -y --db-user=em_admin --db-pass-file=/secure/db-password
    

    Esegui ./setup.sh --help per tutte le opzioni.

    Note di aggiornamento per la configurazione rafforzata e i backup

    • --db-pass=... è stato rimosso perché i segreti sulla riga di comando sono visibili ad altri processi. Inserisci la password in un file accessibile solo al proprietario e sostituisci il vecchio argomento con --db-pass-file=/secure/db-password; l'esempio di configurazione automatizzata sopra è pronto per il copia-incolla.
    • setup.sh non installa più Node.js. Installa una versione supportata di Node.js (^22.12.0 o >=24.0.0) da una fonte di pacchetti attendibile prima di eseguirlo.
    • L'installazione delle dipendenze ora utilizza npm ci, quindi package-lock.json deve essere presente e sincronizzato con package.json.
    • I backup legacy .sql non possono essere ripristinati. Prima di dismettere un vecchio server, aggiornalo a una versione in grado di creare il backup strutturato dell'applicazione e riesporta i dati come .zip.

    Configurazione manuale

    1. Installa le dipendenze di Node.js: ```bash npm ci
      root@kitploit:~
    2. Eseguire le migrazioni del database per creare le tabelle: ```bash npx prisma migrate dev
      root@kitploit:~
    3. Popolare il database per creare l'account Admin predefinito: ```bash npx prisma db seed
      root@kitploit:~

    Esecuzione dell'Applicazione

    Dalla directory del progetto, un singolo comando installa gli aggiornamenti dei pacchetti, avvia PostgreSQL se è fermo e avvia l'applicazione:```bash ./run.sh

    root@kitploit:~
    Lascia quella finestra aperta. Usa l'indirizzo Local o Network che stampa.
    
    Per avviarlo manualmente invece: PostgreSQL deve essere in esecuzione (`sudo systemctl start postgresql` se necessario). Poi avvia il server di sviluppo:```bash
    npm run dev
    

    All'avvio vengono stampati sia un URL di loopback sia l'indirizzo LAN di questa macchina:```

    • Local: http://localhost:3000
    • Network: http://192.168.1.20:3000
    root@kitploit:~
    `npm run dev` e `npm start` si legano a `0.0.0.0` in modo che l'URL di rete funzioni sulla LAN. Considera l'accesso LAN come solo per laboratorio su una rete attendibile. La modalità dev non è rafforzata per l'internet pubblico.
    
    Se apri l'app tramite **hostname** (non IP) e il browser remoto mostra una pagina bianca vuota, aggiungi quel nome a `.env` e riavvia:```bash
    ALLOWED_DEV_ORIGINS=dev.office.example
    

    Deployment in produzione

    Requisiti

    • Node.js ^22.12.0 o >=24.0.0 (vedi engines in package.json)
    • PostgreSQL con un utente applicativo con privilegi minimi (vedi Configurazione del database)
    • HTTPS davanti all'applicazione (reverse proxy come nginx o Caddy). I cookie di sessione sono contrassegnati come Secure in produzione.
    • Archiviazione persistente per la directory uploads/ (screenshot delle vulnerabilità)

    Passaggi di deployment

    1. Clona il repository e installa le dipendenze: ```bash npm ci

      root@kitploit:~
    2. Creare .env con valori di produzione (DATABASE_URL, JWT_SECRET ≥ 32 caratteri).

    3. Applicare le migrazioni del database: ```bash npm run db:migrate

      root@kitploit:~
    4. Esegui i controlli pre-deploy: ```bash npm run audit npm run typecheck npm run build

      root@kitploit:~
    5. Avvia l'applicazione con NODE_ENV=production: ```bash NODE_ENV=production npm run start

      root@kitploit:~

    Per un server reale, eseguilo sotto un process manager (systemd, PM2, ecc.) e metti un reverse proxy davanti per la terminazione TLS.

    1. Crea il primo account admin tramite il seed del database (solo in sviluppo) o ripristinando da un backup. Cambia immediatamente la password temporanea del seed prima di esporre l'app agli utenti.

    Checklist di produzione

    • JWT_SECRET è di almeno 32 caratteri e non è committato su git
    • NODE_ENV=production è impostato per il processo in esecuzione
    • HTTPS è configurato; HTTP reindirizza a HTTPS
    • L'utente del database non ha privilegi CREATEDB o superuser
    • uploads/ è su disco persistente e incluso nei backup
    • backups/ è su disco persistente se gli admin usano Backup
    • pg_dump, pg_restore e zip sono disponibili se gli admin useranno Backup/Restore

    Credenziali predefinite

    Dopo aver eseguito il seed del database, puoi accedere usando l'account admin temporaneo generato:

    • Username: admin
    • Password: scritta una sola volta nel file initial-admin-credentials.txt accessibile solo al proprietario da npx prisma db seed / npm run db:seed

    Nota: Ti verrà richiesto di cambiare questa password temporanea al primo accesso. Elimina initial-admin-credentials.txt subito dopo. Tutte le password devono essere di almeno 16 caratteri e includere una lettera maiuscola, una lettera minuscola, un numero e un simbolo.

    Migrazione del server (Backup / Restore / Reset)

    • La barra laterale memorizza localmente il formato data e la preferenza di fuso orario di ciascun browser. Il fuso orario può seguire il sistema operativo del visualizzatore o mostrare i timestamp in UTC; le date del calendario degli engagement rimangono date di calendario invariate.
    • L'admin può eseguire il backup e il ripristino di tutti i dati dell'applicazione dalla pagina Admin (/dashboard/users).
    • Usalo quando passi da un vecchio server a uno nuovo: clona l'app sul nuovo host, poi ripristina un backup dal vecchio host.

    Nella pagina Admin, il pannello Database mostra i pulsanti Backup, Restore e Reset. Il pannello Users elenca gli account e fornisce un pulsante New User per aggiungere utenti. Il pannello Appearance consente a un admin di scegliere il colore di evidenziazione a livello di applicazione.

    Backup richiede la tua password admin, poi salva un file .zip denominato em-backup-YYYY-MM-DD-HHMM.zip in backups/ nella directory dell'applicazione (engagement-mgr/backups/). Dopo un'esportazione riuscita, usa Download nella pagina Admin. Una concessione firmata di breve durata è conservata in un cookie HttpOnly e funziona solo per l'admin che ha creato il backup.

    • Il timestamp usa l'ora locale del server che esegue l'app, senza secondi. Esempio: em-backup-2026-06-02-1430.zip.
    PercorsoContenuto
    engagement-manager-backup/database.dumpDump completo PostgreSQL in formato custom (schema, tabelle, dati, enum, relazioni) da pg_dump
    engagement-manager-backup/uploads/File screenshot dei finding referenziati nel database
    • Restore accetta solo un file .zip creato da Backup e sostituisce il database corrente e la cartella uploads/. Il ripristino dal browser è limitato a 8 MB così la decompressione non può monopolizzare il processo web. Per un archivio più grande, ferma l'applicazione ed esegui npm run db:restore -- /absolute/path/to/em-backup.zip come utente dell'applicazione. Il comando offline carica .env dalla directory di lavoro e richiede un DATABASE_URL non vuoto in .env o nell'ambiente. Accetta file regolari fino a 500 MB e trasmette ogni voce dell'archivio attraverso il suo limite di dimensione espansa. Il ripristino del database viene eseguito in una singola transazione; il numero di voci dell'archivio, i percorsi, i rapporti di compressione e le dimensioni espanse vengono validati prima che i file vengano installati. Backup, restore, reset e modifiche ai file screenshot condividono un lock di manutenzione esclusivo, così i commit del database e gli scambi sul filesystem non possono sovrapporsi. Richiede la tua password admin per confermare.
    • Reset cancella tutti i dati dell'applicazione, ripristina il colore di evidenziazione rosso predefinito e ricrea admin. Richiede di digitare RESET e di reinserire la password corrente dell'amministratore che conferma. Quella password diventa la password temporanea dell'account ricreato e deve essere cambiata al primo accesso.

    Vecchio server

    1. Accedi come utente Admin.
    2. Apri Admin e clicca Backup (sotto Database).
    3. Salva il file .zip e copialo sul nuovo server (ad esempio con scp o rsync): ```bash scp em-backup-2026-06-02-1430.zip user@new-server:/path/to/
      root@kitploit:~

    Nuovo server

    1. Installa i Prerequisiti e clona il repository.
    2. Crea .env con DATABASE_URL e JWT_SECRET (vedi Configurazione dell'ambiente).
    3. Crea un database PostgreSQL vuoto e un utente (vedi Configurazione del database).
    4. Installa le dipendenze: npm ci.
    5. Esegui le migrazioni e il seed una volta in modo che un Admin possa accedere. Il ripristino sostituisce questi dati di bootstrap con il backup.
    6. Compila e avvia l'app in modalità produzione (vedi Distribuzione in produzione): ```bash npm run build NODE_ENV=production npm run start
      root@kitploit:~
    7. Accedi come admin utilizzando il file initial-admin-credentials.txt riservato al proprietario, cambia la password temporanea ed elimina il file delle credenziali.
    8. Apri Admin (/dashboard/users), fai clic su Restore (sotto Database), seleziona il file .zip dal vecchio server, inserisci la tua password di amministratore e conferma.
    9. Riavvia l'applicazione se era già in esecuzione, in modo che rilevi i dati ripristinati.

    Note

    • Azioni sensibili: Backup, Restore e Reset richiedono tutti una nuova conferma della password di amministratore. Restore e Reset sostituiscono anche le righe esistenti del database e sovrascrivono la directory uploads/.
    • JWT_SECRET: Può differire sul nuovo server; le sessioni browser esistenti dal vecchio server non vengono migrate. Gli utenti effettuano nuovamente l'accesso con gli account del database importato.
    • Codice dell'applicazione: Usa git clone (o distribuisci la stessa revisione) sul nuovo server in modo che l'applicazione corrisponda allo schema previsto dal backup. Se il vecchio server eseguiva uno schema più recente rispetto al codice clonato, allinea le versioni prima di importare.
    • Strumenti: Il backup e il ripristino richiedono gli strumenti CLI installati in Prerequisiti.

    Piano di implementazione e architettura

    Questa sezione documenta l'architettura, lo schema del database, le misure di sicurezza e le fasi di sviluppo completate per l'applicazione Engagement Manager.

    Stack tecnologico

    • Framework Full-Stack: Next.js 16+ (React) con App Router.
    • Database: PostgreSQL.
    • ORM: Prisma.
    • Autenticazione: Implementazione personalizzata con cookie di sessione rigorosi (cancellati alla chiusura del browser) e Argon2id per l'hashing delle password. Le password richiedono un minimo di 16 caratteri, con simboli, numeri e maiuscole/minuscole obbligatori.
    • Stile: CSS vanilla con estetica dark-mode glassmorphism sui pannelli delle pagine; i modali sono completamente opachi tramite Modal.tsx e .modal-panel in globals.css.

    Schema del database

    Aggiunte per il reporting: Finding memorizza anche version, reviewStatus, authorId, reviewerId, templateId e importFingerprint; Screenshot memorizza sortOrder. FindingTemplate contiene la formulazione riutilizzabile revisionata; FindingRevision contiene revisioni testuali immutabili; FindingDraft contiene bozze private per utente con versioni di conflitto; FindingComment registra le discussioni di revisione; EngagementReport contiene il titolo del report, il riepilogo esecutivo e gli ID dei finding ordinati; IssuedReport memorizza un PDF immutabile, uno snapshot del contenuto e un digest SHA-256 per ogni versione emessa. Le relazioni utente autore/revisore usano SetNull; le bozze private vengono rimosse quando il loro utente viene rimosso. I record di reporting seguono il ciclo di vita del loro engagement/finding padre.

    • User: id, username, passwordHash, role (Admin, User), lastPasswordChange, lastLogin, sessions, createdAt, updatedAt.
    • Session: id, userId, expiresAt, createdAt — i record lato server rendono ogni sessione di accesso firmata revocabile individualmente al logout.
    • LoginRateLimit: key, count, resetAt — prenotazioni atomiche dei tentativi di origine e di conferma password. La verifica della password ha anche un limite di concorrenza definito.
    • ApplicationSetting: record singleton delle impostazioni a livello di applicazione con highlightColor (Red, Blue, Teal, Green, Purple o Amber) e updatedAt.
    • Engagement: id, codeName, clientId, chargeCode, status (Prep, Recon, Testing, Reporting, Complete), focus, type (AI, Code_Review, Firewall, Multi, Pentest, Phishing, Physical, Purple_Team, Red_Team, USB_Drop, Vishing, Web_App, Wireless), location (Internal, External), startPrep, endPrep, startRecon, endRecon, startTesting, endTesting, startReporting, , , , , , , (M:N), / (M:N con Contact), , , , .
    • Client: id, company (colonna DB: companyName), address, city, state, zip, phone (colonna DB: phoneNumber), website, notes, contacts, engagements, createdAt, updatedAt.
    • Contact: id, clientId, name, title, email, phone (colonna DB: phoneNumber), notes, assignedEngagements, trustedEngagements, createdAt, updatedAt.
    • Finding: id, engagementId (opzionale), title, category, severity, background, remediation, supportingData (colonna DB: supportingLinks), screenshots, engagementContext, createdAt, updatedAt.
    • EngagementFindingContext: id, engagementId, findingId, observation, affectedHosts, createdAt, updatedAt.
    • Screenshot: id, findingId, filePath, description, createdAt.
    • Operator: id, name, title, email, phoneNumber, discord, github, notes, engagements (M:N), createdAt, updatedAt.

    Aggiunta di nuovi campi

    Per aggiungere un nuovo campo a un modello esistente (ad esempio, focus su Engagement):

    1. Apri prisma/schema.prisma e aggiungi il campo al modello desiderato: ```prisma model Engagement { id String @id @default(uuid()) codeName String focus String? // new field ... }
      root@kitploit:~
    2. Ogni modifica a prisma/schema.prisma deve essere seguita da: ```bash npx prisma migrate dev --name describe_your_change
      root@kitploit:~

    Questo crea una migrazione, aggiorna il database e rigenera i tipi del Prisma Client.

    1. Aggiorna i componenti UI, i form, la logica di validazione o le server action interessate, secondo necessità.

    Architettura di Sicurezza

    1. Autenticazione e Account: L'account predefinito admin viene generato tramite il seed di Prisma. I ruoli Admin hanno accesso completo in creazione/modifica/eliminazione a tutti i record. I ruoli User possono creare, modificare ed eliminare findings e screenshot; tutte le altre entità (engagements, clients, contacts, operators) sono di sola lettura per gli utenti. Ogni pagina della dashboard aggiorna la sessione rispetto al database prima di leggere dati riservati. Solo gli admin possono accedere alla pagina Admin (/dashboard/users), gestire gli account, modificare il colore di evidenziazione a livello di applicazione ed eseguire backup, ripristino o reset del database. Backup, ripristino e reset richiedono una riconferma della password. La creazione di un backup è una Server Action; il download dal browser utilizza GET /api/db/backup?file=… con la sessione Admin e una concessione firmata di cinque minuti in un cookie HttpOnly.
    2. Gestione delle Sessioni: Le sessioni utilizzano JWT jose memorizzati in cookie HttpOnly, SameSite=Lax e una riga Session corrispondente lato server che il logout revoca. La scadenza del cookie è intenzionalmente omessa per mantenere il comportamento di sessione del browser; sia il token firmato che il record nel database scadono dopo un giorno. L'ammissione transazionale mantiene al massimo dieci sessioni attive per account.
    3. Sicurezza dell'Applicazione:
      • Il Next.js Edge Proxy (src/proxy.ts) applica i controlli di sessione e la rotazione della password ogni 90 giorni su tutte le route protette.
      • Le Next.js Server Actions riducono il rischio di CSRF grazie alle protezioni same-origin integrate.
      • Prisma mitiga automaticamente l'SQL injection parametrizzando tutte le query.
      • React mitiga l'XSS eseguendo automaticamente l'escape degli elementi HTML al render.
      • Gli screenshot sono memorizzati con permessi di solo proprietario e quote aggregate/per-finding limitate. L'eliminazione utilizza marker pendenti recuperabili; all'avvio della dashboard, durante gli upload e i backup, i file su disco vengono riconciliati con i riferimenti nel database, con i fallimenti di pulizia registrati nell'output di audit, errori dettagliati nei log del server e un avviso mostrato agli amministratori. La riconciliazione fallita della dashboard ritenta al massimo una volta al minuto per processo; upload e backup validano comunque immediatamente lo storage. La route autenticata /api/uploads previene l'IDOR e restituisce risposte no-store.
    Scarica lo strumento
    endReporting
    outbrief
    objectives
    targets
    exclusions
    notes
    operators
    contacts
    trustedAgents
    findings
    findingContexts
    createdAt
    updatedAt