Files
nis2-agile/application/cli/build_nuova_agile_p7_agile.php
DevEnv nis2-agileandClaude Opus 4.8 6ca78f9669 [CLIENT] Nuova Agile: recepito modello SGSI agile / work-from-anywhere (5 doc pubblicati + scope + 4 rischi)
ISO 27001 lean per azienda cloud-native senza sede: Linea Guida modello agile + Politiche Lavoro da remoto/Dispositivi aziendali/Posta aziendale + Procedura custodia e backup chiavi cloud (key escrow controllato). Scope/contesto SGSI aggiornati (nessuna sede, work-from-anywhere, responsabilita condivisa col cloud). Rischi R-011..R-014 (reti non fidate, furto dispositivo, perdita chiavi cloud, commistione privato/lavoro). Documenti PUBBLICATI v1.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 14:57:32 +02:00

70 lines
6.3 KiB
PHP

<?php
/**
* build_nuova_agile_p7_agile.php — Recepisce il modello "work-from-anywhere / SGSI agile":
* inserisce+PUBBLICA 5 documenti (da _docs_agile/), aggiorna scope/contesto SGSI, aggiunge 4 rischi. IDEMPOTENTE.
*/
if (PHP_SAPI !== 'cli') { http_response_code(403); exit("CLI only\n"); }
require_once __DIR__ . '/../config/env.php';
require_once __DIR__ . '/../config/database.php';
$pdo = Database::getInstance();
function ex(PDO $p,string $s,array $a=[]):void{$st=$p->prepare($s);$st->execute($a);}
function one(PDO $p,string $s,array $a=[]){$st=$p->prepare($s);$st->execute($a);return $st->fetch(PDO::FETCH_ASSOC);}
$NOW='2026-06-20 15:00:00'; $TODAY='2026-06-20'; $NEXT='2027-06-20'; $ORGID=996003; $RSGSI=326; $ITSEC=330; $PRES=103;
$m=one($pdo,"SELECT id FROM isms_models WHERE organization_id=?",[$ORGID]); $modelId=(int)$m['id'];
/* ---- 1) Documenti agili: inserisci + PUBBLICA + snapshot ---- */
$dir=__DIR__.'/_docs_agile'; $files=glob($dir.'/*.html'); sort($files);
$ins=0;$skip=0;
foreach($files as $f){
$raw=file_get_contents($f); $nl=strpos($raw,"\n");
$meta=substr($raw,0,$nl); $body=ltrim(substr($raw,$nl+1));
if(!preg_match('/^<!--META\|doc_type=([a-z_]+)\|title=(.+)\|status=(?:draft|review|approved)\|version=([0-9.]+)-->/',$meta,$mm)){ echo " ! META KO ".basename($f)."\n"; continue; }
[$_,$dt,$title,$ver]=$mm; $title=trim($title);
$exd=one($pdo,"SELECT id FROM isms_documents WHERE isms_model_id=? AND title=?",[$modelId,$title]);
if($exd){ echo " = $title\n"; $skip++; continue; }
ex($pdo,"INSERT INTO isms_documents (isms_model_id,organization_id,doc_type,title,status,ai_generated,body_html,version,
approved_by,approved_at,reviewed_by,reviewed_at,published_by,published_at,effective_date,next_review_date,created_by,created_at,updated_at)
VALUES (?,?,?,?, 'published',1,?, ?, ?,?,?,?,?,?,?,?, ?,?,?)",
[$modelId,$ORGID,$dt,$title,$body,$ver, $RSGSI,$NOW,$RSGSI,$NOW,$PRES,$NOW,$TODAY,$NEXT, $RSGSI,$NOW,$NOW]);
$did=(int)$pdo->lastInsertId();
ex($pdo,"INSERT INTO isms_document_versions (document_id,isms_model_id,organization_id,version,status,body_html,change_note,created_by,created_at)
VALUES (?,?,?,?, 'published', ?, ?, ?, ?)",
[$did,$modelId,$ORGID,$ver,$body,'Pubblicazione versione '.$ver.' (modello agile work-from-anywhere)',$PRES,$NOW]);
echo " + [$dt] $title\n"; $ins++;
}
echo "DOCUMENTI agili: +$ins pubblicati (skip $skip)\n";
/* ---- 2) Scope/contesto SGSI: modello agile work-from-anywhere ---- */
$scope="Il SGSI di Nuova Agile Technology srl adotta un approccio AGILE/LEAN coerente con la natura dell'azienda: piccola software house "
."cloud-native con modello di lavoro \"work-from-anywhere\". Ambito: sviluppo, erogazione e manutenzione dei prodotti in licenza "
."(installati presso i clienti) e dei servizi SaaS in cloud, inclusi gli account, i dati dei clienti, i dispositivi aziendali "
."(un portatile e uno smartphone dedicati per collaboratore) e i servizi cloud (Aruba, Hetzner, piattaforme AI). NESSUNA sede fissa "
."ne perimetro fisico aziendale: il lavoro si svolge da qualsiasi luogo. La sicurezza fisica dei data center e gran parte "
."dell'infrastruttura sono ereditate dai fornitori cloud (modello di responsabilita condivisa). Documentazione minima, viva e "
."risk-based; evidenze raccolte in modo automatizzato dalla piattaforma (controlli periodici, audit interni).";
$ctxInt="Micro/piccola impresa (9 dipendenti + 2 collaboratori esterni a P.IVA + Presidente) interamente cloud, senza uffici fissi. "
."Dispositivi aziendali dedicati e cifrati con separazione netta tra strumenti privati e di lavoro; account e posta aziendali "
."sotto controllo della societa. Team tecnico interno; DPO esterno. Approccio SGSI agile: scope stretto, secure-by-default "
."(MFA, cifratura, SSO), documentazione concisa, miglioramento iterativo. Eccezione controllata: key escrow cifrato per le chiavi "
."di accesso ai cloud (recupero a doppia autorizzazione, mai in chiaro sui dispositivi).";
ex($pdo,"UPDATE isms_models SET scope_statement=?, context_internal=?, updated_at=? WHERE id=?",[$scope,$ctxInt,$NOW,$modelId]);
echo "SCOPE/contesto SGSI aggiornato (modello agile)\n";
/* ---- 3) Rischi del work-from-anywhere ---- */
$risks=[
['R-011','Lavoro su reti non fidate (Wi-Fi pubblici, reti domestiche)','Il lavoro da qualsiasi luogo avviene su reti non controllate dall\'azienda: rischio di intercettazione, MITM, accesso non autorizzato. Mitigazione: TLS ovunque, accesso ai servizi solo via canali cifrati/SSO con MFA, niente esposizione di servizi su reti locali.','cyber',3,3,'21.2.d'],
['R-012','Furto o smarrimento del dispositivo fuori sede','I dispositivi aziendali sono usati ovunque (casa, coworking, viaggi): rischio di furto/smarrimento con possibile esposizione di dati. Mitigazione: cifratura integrale del disco, MDM con blocco e cancellazione remota, blocco schermo automatico, niente dati sensibili in chiaro locale.','physical',3,3,'21.2.j'],
['R-013','Perdita di accesso ai servizi cloud per smarrimento delle chiavi','Forte dipendenza dalle chiavi/credenziali di accesso ai cloud: lo smarrimento dell\'unico dispositivo potrebbe causare il blocco dell\'accesso ai servizi. Mitigazione: key escrow CONTROLLATO (copie cifrate in gestore segreti, recupero a doppia autorizzazione, mai in chiaro sul portatile).','operational',2,4,'21.2.c'],
['R-014','Commistione tra strumenti privati e di lavoro / shadow IT','Uso di account o strumenti personali per attivita lavorative, o dati aziendali su dispositivi non gestiti. Mitigazione: dispositivi e account esclusivamente aziendali, separazione netta privato/lavoro, posta/servizi sotto controllo societario, policy d\'uso accettabile.','compliance',2,3,'21.2.i'],
];
$ri=0;
foreach($risks as [$rc,$t,$d,$cat,$L,$I,$art]){
if(one($pdo,"SELECT id FROM risks WHERE organization_id=? AND risk_code=?",[$ORGID,$rc])){ continue; }
ex($pdo,"INSERT INTO risks (organization_id,risk_code,title,description,category,likelihood,impact,inherent_risk_score,treatment,status,owner_user_id,review_date,nis2_article,created_at,updated_at)
VALUES (?,?,?,?,?,?,?,?, 'mitigate','treating', ?, ?, ?, ?, ?)",
[$ORGID,$rc,$t,$d,$cat,$L,$I,$L*$I,$ITSEC,'2026-12-20',$art,$NOW,$NOW]);
echo " risk + $rc (".($L*$I).")\n"; $ri++;
}
echo "RISCHI work-from-anywhere: +$ri\n";
echo "\nFASE 7 (modello agile) OK\n";