↳ HEAD punta a il tuo progetto

Inizia un progetto
← Tutti gli approfondimenti

e3b7a14·Approfondimenti·7 min

Scrivi il software come se fosse già pubblico

C’è un test che uso quando progetto un sistema: se domani il codice, lo schema del database e una copia dei dati finissero online, cosa si perderebbe? Se la risposta dipende dal fatto che nessuno li guardi, il progetto ha già un problema.

Perché “nessuno lo vede” non è più una difesa

Per anni molta sicurezza applicativa ha poggiato su un’ipotesi implicita: il codice è privato, quindi un errore resta nascosto finché qualcuno non lo trova. Oggi un modello capace di leggere un’intera codebase e di ragionare sui suoi percorsi fa in pochi minuti ciò che richiedeva giorni a una persona esperta. Non serve credere a scenari estremi: basta ammettere che trovare un buco costa molto meno di prima, per chi attacca come per chi difende.

La conseguenza pratica è una regola di progetto: nessuna protezione deve dipendere dal fatto che qualcuno non conosca il sistema. Né i nomi delle tabelle, né la struttura delle rotte, né la convinzione che “questo endpoint non lo trova nessuno”.

Un caso reale: l’isolamento che dipendeva da un filtro

A giugno 2025 Asana ha scoperto un bug nel proprio server MCP che poteva far vedere i dati di un cliente ad altre organizzazioni. La funzione è stata messa offline; secondo alcune fonti i clienti coinvolti erano circa mille. Non era un attacco: era un errore di logica, presente fin dal lancio della funzione.

È il caso tipico di un isolamento che vive nel codice applicativo: ogni pagina, ogni endpoint e ogni esportazione deve ricordarsi di aggiungere il filtro sul cliente giusto, e basta una volta in cui non succede.

Cinque regole che non dipendono dal fatto che nessuno guardi

  • L’isolamento sta nel database, non nel filtro. Se è il database a mostrare a ciascun utente solo le righe della sua organizzazione, anche una query scritta di fretta restituisce solo ciò che le spetta. Vale per l’interfaccia, per le API, per gli agenti AI e per i job in coda.
  • Una copia dei dati non deve dare accesso. Le chiavi di sessione si conservano come impronta (hash), non in chiaro: un backup finito in mani sbagliate non permette di entrare come un altro utente, amministratori compresi.
  • Lo storico non si cancella dall’applicazione. L’applicazione può solo aggiungere righe, non modificarle né eliminarle. Chi entra, o un errore nel codice, non può ripulire le proprie tracce.
  • Il contesto non è un parametro. L’organizzazione su cui si lavora è scritta nel collegamento e non è un argomento che chi chiama può cambiare. Se un testo nascosto in un documento suggerisse a un agente di guardare un altro cliente, non esisterebbe un modo per farlo.
  • Niente strumenti generici. Nessuna funzione tipo “esegui una query” o “scarica questo indirizzo”: ogni operazione esposta ha un nome, un permesso e uno schema. Un perimetro che non esiste non si allarga per sbaglio.

Il costo, e perché lo si paga una volta sola

Non è gratis. Le regole del database vanno scritte nel modo giusto (una forma sbagliata può costare molto in prestazioni) e ogni protezione in più è codice da collaudare. Ma sono costi che si pagano una volta, nelle fondamenta: un modulo nuovo le eredita senza che chi lo scrive debba ricordarsi di niente.

È la stessa logica per cui conviene sistemare i dati prima di comprare strumenti: il lavoro noioso fatto presto rende affidabile tutto ciò che viene dopo. Una dichiarazione di parte: sono le regole su cui stiamo costruendo il nostro nuovo core e che applichiamo ai sistemi per i clienti, in particolare sulle web app e sull’infrastruttura.

Fonti

Vuoi ragionarci sul tuo caso? Parliamone.

merge@beecreative.it copiata negli appunti