+
+
+
+
+
+ 1
+ Stack Tecnologico
+
+
+
+
+ Backend
+ PHP 8.4 — vanilla, Front Controller pattern, zero dipendenze framework. Router personalizzato con pattern matching per URI gerarchici.
+
+
+ Database
+ MySQL 8.0 — 22 tabelle, indici ottimizzati, soft delete, trigger immutabili su audit_log. PDO con prepared statements.
+
+
+ Frontend
+ HTML5 / CSS3 / JavaScript — vanilla, nessun framework JS. 17 pagine HTML + 3 admin. CSS custom ~1.600 righe. i18n IT/EN integrato.
+
+
+ Autenticazione
+ JWT HS256 — access token 2h, refresh token 7d. Refresh atomico con SELECT FOR UPDATE. Idle timeout 30min con avviso.
+
+
+ AI Integration
+ Anthropic Claude — modello claude-sonnet-4-5. Prompt anonimizzati (no ragione sociale, no fatturato). 4 funzionalità AI.
+
+
+ Infrastruttura
+ Hetzner CPX31 — Ubuntu, Apache 2.4, subdomain dedicato. Docker-ready (Dockerfile + nginx.conf inclusi).
+
+
+
+
+
+
+ 2
+ Architettura Sistema
+
+
+
+
+
+
+ Browser
+
+ HTML5 Pages
+ api.js Client
+ i18n.js IT/EN
+ common.js Utils
+ help.js
+
+ ↓ HTTPS / JWT Bearer
+
+
+ Router
+
+ public/index.php — Front Controller
+ .htaccess Rewrite
+
+ ↓ /api/{controller}/{action}/{id?}
+
+
+ Controllers
+
+ Auth
+ Assessment
+ Risk
+ Incident
+ Policy
+ SupplyChain
+ Audit
+ + 8 altri
+
+ ↓ PDO / Services
+
+
+ Services
+
+ AIService (Claude)
+ EmailService
+ ReportService
+ RateLimitService
+ VisuraService
+
+ ↓ PDO Singleton
+
+
+ Database
+
+ MySQL 8.0 — nis2_agile_db — 22 tabelle
+
+
+
+
+
+
+
+
+
+
+ 3
+ API REST — Endpoint Principali
+ Base URL: https://nis2.certisource.it/api/{controller}/{action}/{id?} — Auth: Bearer JWT + X-Organization-Id header
| Modulo | +Metodo | +Endpoint | +Descrizione | +
|---|---|---|---|
| Auth | POST | /auth/login, /register, /refresh | Login, registrazione, rinnovo token JWT |
| Auth | GET | /auth/me | Dati utente autenticato e organizzazioni |
| Organizations | POST | /organizations/create, /classify | Crea org, classifica soggetto NIS2 |
| Assessment | GET | /assessments/{id}/questions | 80 domande gap analysis (10 categorie Art.21) |
| Assessment | POST | /assessments/{id}/ai-analyze | Analisi AI dei gap con raccomandazioni |
| Risks | GET | /risks/matrix | Matrice rischi 5×5 aggregata |
| Risks | POST | /risks/ai-suggest | Suggerimenti rischi AI per settore/asset |
| Incidents | POST | /incidents/{id}/early-warning | Early warning CSIRT entro 24h (Art.23) |
| Incidents | POST | /incidents/{id}/final-report | Report finale CSIRT entro 30gg (Art.23) |
| Policies | POST | /policies/ai-generate | Genera policy NIS2 con AI (per categoria) |
| Audit | GET | /audit/executive-report | Report esecutivo HTML stampabile |
| Audit | GET | /audit/export?type=risks | Export CSV (rischi/incidenti/controlli/asset) |
| NCR/CAPA | POST | /ncr/from-assessment | Genera NCR automatiche dai gap assessment |
| Onboarding | POST | /onboarding/upload-visura | Estrazione AI da PDF visura camerale |
+
+
+
+
+
+ 4
+ Schema Database — 22 Tabelle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ organizations
Tenant principale + classificazione NIS2
users
Utenti (7 ruoli, multi-org)
user_organizations
Mapping utente↔org + ruolo
refresh_tokens
Token refresh JWT indicizzati
assessments
Sessioni gap analysis
assessment_responses
Risposte singole domande
risks
Register rischi (soft delete)
risk_treatments
Piani di trattamento
incidents
Incidenti + flag significativo
incident_timeline
Aggiornamenti e notifiche
policies
Policy (soft delete, versioning)
suppliers
Fornitori catena approvv.
training_courses
Catalogo corsi formazione
training_assignments
Assegnazioni e completamenti
assets
Inventario ICT (4 tipi)
compliance_controls
Controlli NIS2 per org
evidence_files
Allegati e documenti audit
audit_logs
Log immutabili (trigger MySQL)
ai_interactions
Storico chiamate API AI
email_log
Log notifiche email CSIRT
non_conformities
NCR — Non Conformity Reports
corrective_actions
CAPA — Azioni correttive
+
+
+
+
+
+ 5
+ Sicurezza Applicativa
+
+
+
+
+ JWT + Refresh Token Atomico
+ Access token 2h, refresh 7d. Rinnovo con SELECT FOR UPDATE (no race conditions). Revoca token al logout.
+
+
+ CORS Configurato
+ No wildcard. Origin verificata contro lista bianca configurabile. Header personalizzati sicuri.
+
+
+ Rate Limiting
+ File-based per IP (proxy-aware, X-Forwarded-For). Login: 5/min, 20/h. Register: 3/10min. AI: 10/min.
+
+
+ SQL Injection Prevention
+ PDO esclusivo con prepared statements. Nessuna concatenazione di query. Input validato lato server.
+
+
+ XSS Prevention
+ escapeHtml() su ogni output frontend. Content-Security-Policy header configurato.
+
+
+ Audit Log Immutabile
+ Trigger MySQL prevent_update + prevent_delete su audit_logs. Ogni operazione registrata con utente, azione e timestamp.
+
+
+ AI Data Privacy
+ Prompt anonimizzati: ragione sociale e fatturato mai inviati ad Anthropic. Dipendenti convertiti in range (micro/piccola/media/grande).
+
+
+ Idle Session Timeout
+ Logout automatico dopo 30 min di inattività. Avviso con countdown 5 min. Monitoraggio eventi mouse/keyboard/scroll.
+
+
+
+
+
+
+ 6
+ Performance Target
+
+
+
+
+ <1s
+ secondi
+ Caricamento Dashboard
+
+
+ <2s
+ secondi
+ Report Compliance
+
+
+ 100+
+ rischi
+ Matrice Fluida
+
+
+ ∞
+ tenant
+ Multi-Tenant Isolati
+
+
+
+
+
+
+
+ 7
+ Opzioni di Deploy
+
+
+
+
+
+ 8
+ Copertura Normativa NIS2
+
+
+ Art. 20
+ Governance — Formazione obbligatoria management, responsabilità organi
Art. 21.1
+ Risk-based approach — Risk register, matrice rischi, trattamenti
Art. 21.2(a)
+ Politiche sicurezza — Gap analysis 80 domande, policy management
Art. 21.2(b)
+ Gestione incidenti — Ciclo di vita, classificazione AI, timeline
Art. 21.2(c)
+ Business continuity — Asset inventory, dipendenze, backup
Art. 21.2(d)
+ Supply chain — Registro fornitori, valutazione rischio, scoring
Art. 21.2(g)
+ Formazione — Training management, compliance tracking, report
Art. 23
+ Notifica incidenti — Early warning 24h, notifica 72h, report 30gg
Art. 32-33
+ Vigilanza — Audit log immutabili, evidenze, controlli compliance
D.Lgs. 138/2024
+ Recepimento italiano NIS2 — Classificazione soggetti, settori