NIS2 Agile — Scheda Tecnica

Specifiche di architettura, stack tecnologico e integrazione

v1.0 — Febbraio 2026

nis2.certisource.it

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
AuthPOST/auth/login, /register, /refreshLogin, registrazione, rinnovo token JWT
AuthGET/auth/meDati utente autenticato e organizzazioni
OrganizationsPOST/organizations/create, /classifyCrea org, classifica soggetto NIS2
AssessmentGET/assessments/{id}/questions80 domande gap analysis (10 categorie Art.21)
AssessmentPOST/assessments/{id}/ai-analyzeAnalisi AI dei gap con raccomandazioni
RisksGET/risks/matrixMatrice rischi 5×5 aggregata
RisksPOST/risks/ai-suggestSuggerimenti rischi AI per settore/asset
IncidentsPOST/incidents/{id}/early-warningEarly warning CSIRT entro 24h (Art.23)
IncidentsPOST/incidents/{id}/final-reportReport finale CSIRT entro 30gg (Art.23)
PoliciesPOST/policies/ai-generateGenera policy NIS2 con AI (per categoria)
AuditGET/audit/executive-reportReport esecutivo HTML stampabile
AuditGET/audit/export?type=risksExport CSV (rischi/incidenti/controlli/asset)
NCR/CAPAPOST/ncr/from-assessmentGenera NCR automatiche dai gap assessment
OnboardingPOST/onboarding/upload-visuraEstrazione 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
Cloud SaaS
  • Hosting su nis2.certisource.it
  • Zero configurazione client
  • Aggiornamenti automatici
  • Backup giornaliero incluso
  • SSL/TLS incluso
On-Premise / VPS
  • PHP 8.4 + MySQL 8.0 + Apache/Nginx
  • Deploy via git pull + .env config
  • Supporto subdomain dedicato
  • Documentazione SQL migrations
  • Chiave SSH per accesso sicuro
Docker / Container
  • Dockerfile ottimizzato incluso
  • docker-compose.yml pronto
  • nginx.conf + php.ini configurati
  • Compatibile Kubernetes
  • Multi-stage build support
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