prepare($sql); $s->execute($a); } function one(PDO $p, string $sql, array $a = []) { $s=$p->prepare($sql); $s->execute($a); return $s->fetch(PDO::FETCH_ASSOC); } $NOW='2026-06-20 10:55:00'; $RSGSI=326; $org=one($pdo,"SELECT id FROM organizations WHERE name=?",['Nuova Agile Technology srl']); if(!$org) exit("ORG mancante\n"); $orgId=(int)$org['id']; // mappa ruoli organigramma -> id function roleId(PDO $p,int $org,string $name){ $r=one($p,"SELECT id FROM org_roles WHERE organization_id=? AND role_name=?",[$org,$name]); return $r?(int)$r['id']:null; } $RID_RSGSI=roleId($pdo,$orgId,'Responsabile del Sistema di Gestione (RSGSI)'); $RID_IT =roleId($pdo,$orgId,'Responsabile IT e Sicurezza Tecnica'); $RID_DIR =roleId($pdo,$orgId,'Direzione Generale'); $next=['settimanale'=>'2026-06-27','mensile'=>'2026-07-20','trimestrale'=>'2026-09-20','semestrale'=>'2026-12-20','annuale'=>'2027-06-20']; /* ---- PIANI DI CONTROLLO (periodic_controls) -------------------------------- */ // code,title,desc,category,control_ref,owner,freq,method $ctl=[ ['CTL-001','Riesame degli accessi e dei privilegi','Verifica periodica di account, ruoli e privilegi su sistemi cloud, SaaS e repository; rimozione accessi non piu necessari.','Controllo accessi','A.5.18',$RID_IT,'trimestrale','Estrazione utenze da IdP/cloud/Git, confronto con organigramma e matrice accessi, revoca delle eccedenze. Registrazione esito nel modulo Controlli periodici.'], ['CTL-002','Verifica MFA su tutte le utenze','Controllo che l\'autenticazione a piu fattori sia attiva e obbligatoria su tutti gli accessi (cloud, SaaS, email, Git, AI).','Controllo accessi','A.8.5',$RID_IT,'trimestrale','Report MFA da IdP e servizi; rimedio immediato per le utenze non conformi.'], ['CTL-003','Test di ripristino dei backup','Esecuzione di un ripristino di prova dei backup (dati SaaS e di prodotto) per verificarne integrita e tempi.','Continuita','A.8.13',$RID_IT,'semestrale','Restore di prova in ambiente isolato, verifica integrita e RTO/RPO, verbale di test.'], ['CTL-004','Vulnerability scan infrastruttura e SaaS','Scansione delle vulnerabilita su risorse cloud (Aruba/Hetzner), piattaforma SaaS e dipendenze software.','Vulnerabilita','A.8.8',$RID_IT,'mensile','Scanner automatico + revisione SCA delle dipendenze; apertura azioni per le criticita.'], ['CTL-005','Revisione di log e accessi anomali','Analisi dei log di accesso e sicurezza per individuare anomalie o accessi non autorizzati.','Monitoraggio','A.8.16',$RID_IT,'mensile','Revisione log cloud/SaaS/IdP; eventi sospetti aperti come incidente.'], ['CTL-006','Applicazione patch critiche','Verifica e applicazione tempestiva delle patch di sicurezza critiche su endpoint e servizi cloud.','Vulnerabilita','A.8.8',$RID_IT,'settimanale','Controllo aggiornamenti critici (OS laptop, immagini, dipendenze) e applicazione entro gli SLA definiti.'], ['CTL-007','Riesame del registro dei rischi','Aggiornamento e riesame del registro dei rischi e dello stato dei trattamenti.','Rischio','A.5.1',$RID_RSGSI,'semestrale','Riesame rischi nel modulo Rischi, ricalcolo punteggi, aggiornamento piani di trattamento.'], ['CTL-008','Riesame dei fornitori e dei contratti/DPA','Valutazione periodica dei fornitori critici (Aruba, Hetzner, AI, collaboration) e dei DPA/clausole di sicurezza.','Fornitori','A.5.22',$RID_RSGSI,'annuale','Questionari/evidenze fornitori, verifica certificazioni e DPA, aggiornamento risk score nel modulo Supply Chain.'], ['CTL-009','Riesame della SoA e dei controlli ISO','Verifica di applicabilita e stato di attuazione dei controlli ISO 27001/27017/27018 nella SoA.','SGSI','A.5.1',$RID_RSGSI,'annuale','Riesame SoA nel modulo Modello SGSI; aggiornamento stato e motivazioni.'], ['CTL-010','Penetration test applicativo','Test di sicurezza applicativo su SaaS e prodotto in licenza, eseguito internamente o da terzi.','Vulnerabilita','A.8.29',$RID_IT,'annuale','Pentest applicativo, raccolta findings, apertura NC/azioni correttive.'], ['CTL-011','Formazione e awareness sicurezza','Erogazione e verifica del completamento della formazione obbligatoria su sicurezza e NIS2.','Formazione','A.6.3',$RID_RSGSI,'annuale','Assegnazione corsi nel modulo Formazione, verifica completamento e superamento quiz.'], ['CTL-012','Simulazione phishing','Campagna simulata di phishing verso il personale e analisi dei risultati.','Formazione','A.6.3',$RID_IT,'semestrale','Invio simulazione, misura del tasso di click/segnalazione, formazione mirata.'], ['CTL-013','Verifica cifratura degli endpoint','Controllo che tutti i PC portatili abbiano la cifratura del disco attiva e aggiornata.','Endpoint','A.8.24',$RID_IT,'semestrale','Report MDM/inventario, verifica BitLocker/FileVault/LUKS attivi, rimedio non conformita.'], ['CTL-014','Riesame della Direzione','Riesame periodico del SGSI da parte dell\'Alta Direzione (input/output ISO 27001 cl.9.3).','SGSI','A.5.1',$RID_DIR,'annuale','Riunione di riesame con input prestabiliti, decisioni e azioni verbalizzate nel modulo Riesame della Direzione.'], ['CTL-015','Audit interno del SGSI','Audit interno pianificato del SGSI sulle clausole ISO 27001 e sui controlli applicabili.','SGSI','A.5.35',$RID_RSGSI,'annuale','Programma di audit, conduzione, rilievi e NC nel modulo Audit interni.'], ]; $ci=0; foreach($ctl as [$code,$t,$d,$cat,$ref,$owner,$freq,$method]){ $exc=one($pdo,"SELECT id FROM periodic_controls WHERE organization_id=? AND code=?",[$orgId,$code]); if(!$exc){ ex($pdo,"INSERT INTO periodic_controls (organization_id,code,title,description,category,control_ref,owner_role_id,frequency,next_due_date,method,status,created_by,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?, 'active', ?,?,?)", [$orgId,$code,$t,$d,$cat,$ref,$owner,$freq,$next[$freq],$method,$RSGSI,$NOW,$NOW]); echo " ctl + $code ($freq)\n"; $ci++; } else echo " ctl = $code\n"; } echo "PIANI DI CONTROLLO: +$ci\n"; /* ---- CORSI DI FORMAZIONE --------------------------------------------------- */ // title,desc,target,nis2_article,mandatory,minutes $courses=[ ['Sicurezza delle informazioni e NIS2 - awareness','Corso base obbligatorio: principi di sicurezza, politiche aziendali, obblighi NIS2 (D.Lgs.138/2024) e ruolo di ciascuno.','all','24',1,45], ['Riconoscimento di phishing e social engineering','Come riconoscere e segnalare email sospette, truffe e tentativi di social engineering.','all',null,1,30], ['Protezione dei dati personali (GDPR e ISO 27018)','Trattamento sicuro dei dati personali dei clienti nel cloud; obblighi GDPR e controlli ISO 27018.','compliance_manager',null,1,40], ['Sviluppo software sicuro (Secure SDLC)','Pratiche di sviluppo sicuro, gestione delle dipendenze e dei segreti, code review per il team tecnico.','technical',null,1,60], ['Gestione degli incidenti e notifica NIS2','Procedura interna di gestione incidenti e tempistiche di notifica al CSIRT Italia (24h/72h/1 mese).','technical','25',1,30], ]; $cc=0; foreach($courses as [$t,$d,$tr,$art,$mand,$min]){ $exco=one($pdo,"SELECT id FROM training_courses WHERE organization_id=? AND title=?",[$orgId,$t]); if(!$exco){ ex($pdo,"INSERT INTO training_courses (organization_id,title,description,target_role,nis2_article,is_mandatory,duration_minutes,passing_score,is_active,created_at,updated_at) VALUES (?,?,?,?,?,?,?,70,1,?,?)", [$orgId,$t,$d,$tr,$art,$mand,$min,$NOW,$NOW]); echo " corso + $t\n"; $cc++; } else echo " corso = $t\n"; } echo "CORSI: +$cc\n"; echo "\nFASE 4 OK\n";