Un campo "facoltativo" nel form onboarding può diventare una violazione da milioni

VibeInspect.ai · 26 agosto 2026 · 5 min di lettura
- sicurezza
- vibe-coding
- lovable
- dati-sensibili
- onboarding
- audit
Un campo del form onboarding può diventare una violazione, anche se non lo usi mai
Un'analisi pubblicata su Dev.to, "That HR Form Question About Your Mom's Health? It's Legally a DNA Test.", parte da un punto che dovrebbe far riflettere chiunque gestisca un onboarding: raccogliere la storia clinica familiare può essere trattato, sul piano legale, alla stregua di un test genetico non autorizzato.
Il passaggio più scomodo per chi scrive software è questo: secondo l'articolo, sotto normative come la GIPA dell'Illinois “l'ingestione stessa del payload API costituisce la violazione, a prescindere dal fatto che il dato venga poi indicizzato, analizzato o usato nella business logic”. In altre parole, non conta se quel dato lo processi davvero. Conta che il tuo endpoint lo abbia accettato e salvato. E l'esposizione economica citata parte da 2.500 fino a 15.000 dollari per singola violazione, senza dover dimostrare un danno reale.
Marcare un campo come “facoltativo” nel frontend non ti mette al riparo. Se il backend accetta quella chiave e la scrive a database, il problema esiste comunque.
Cosa significa se il tuo codice l'ha scritto Lovable
Quando costruisci un form di onboarding o un'intake medica con Lovable, lo strumento genera in fretta il frontend, l'endpoint e lo schema della tabella. È esattamente ciò che ti serve per partire. Ma il modello tende a essere generoso: crea campi, li mappa, li salva. Se hai chiesto “un form di registrazione dipendenti” o “un questionario per pazienti”, è plausibile che nel payload finiscano attributi come family_history, medical_conditions o simili, con l'endpoint che li accetta senza filtri.
Il punto delicato è che il codice generato “funziona”. Il form invia, l'API risponde 200, il record compare a database. Nessun errore, nessun crash. Eppure hai appena costruito una superficie di rischio che cresce in modo lineare con ogni utente registrato, come sottolinea l'articolo.
Un solo strumento, un solo problema concreto: qui il tema è l'ingestione non validata di dati sensibili in un endpoint generato da AI. Non è un bug estetico. È una decisione di architettura che nessuno ha preso consapevolmente.
Perché ora ti serve un audit
Il motivo per cui questo tipo di problema resta invisibile è semplice: chi ha usato Lovable non ha mai letto riga per riga cosa accetta il suo endpoint. Hai descritto un risultato, hai ottenuto un'app pubblicata. Nel mezzo, la logica di cosa entra nel database non è mai stata sotto i tuoi occhi.
Un audit serve proprio a produrre un verdetto su questo: quali campi il tuo backend accetta davvero, quali finiscono in storage persistente, dove manca una sanitizzazione a monte. Non è la stessa cosa di sapere che “l'app va”. Il fatto che l'onboarding funzioni non ti dice nulla su cosa stai raccogliendo senza volerlo.
Con VibeInspect carichi lo ZIP del repository, il codice viene analizzato da specialisti AI e ricevi un PDF con il verdetto. Nessun server, il codice sorgente viene cancellato al termine dell'analisi. Non è un pentest e non corregge il codice al posto tuo: ti dice in che stato è, e nel piano che analizza il dettaglio ti indica file, riga ed evidenze del punto in cui l'endpoint accetta un attributo che non dovrebbe.
Le evidenze che contano, in un caso come questo, sono precise: qual è l'endpoint incriminato, quale chiave del payload viene salvata, se esiste un middleware che filtra prima della persistenza, se il campo “facoltativo” è validato lato server o solo nascosto lato client. Un verdetto senza queste evidenze è un'opinione. Con queste evidenze diventa una lista di cose da sistemare.
Cosa un linter non vede
Un linter è utilissimo per lo stile, le variabili non usate, i tipi incoerenti. Ma un linter non ha idea del significato dei dati che il tuo endpoint accetta. Per un linter, family_history: string è una proprietà come un'altra: sintatticamente perfetta, nessun avviso.
Quello che un linter non può dirti è che quel campo rappresenta un'informazione relazionale che riguarda anche terze persone non consenzienti, come genitori o fratelli. Non sa che accettarlo senza consenso isolato è il problema. Non sa che l'assenza di un hook di pre-processing all'API gateway trasforma un innocuo campo di form in un rischio normativo.
Un linter guarda la forma. Un audit guarda cosa fa il codice: dove entra il dato, se viene filtrato, dove viene scritto, chi può leggerlo dopo. È la differenza tra “il codice è ordinato” e “il codice fa la cosa giusta con i dati delle persone”.
Cosa fare questa settimana
Non ti serve riscrivere l'applicazione. Ti servono tre passi concreti nei prossimi giorni.
Primo: apri lo schema della tua tabella di onboarding e fai l'elenco esatto dei campi che vengono scritti. Non quelli che pensi di raccogliere, quelli che il database contiene davvero.
Secondo: verifica se esiste un filtro lato server. Prova a inviare al tuo endpoint un payload con un campo sensibile in più rispetto a quelli previsti dal frontend e guarda se finisce a database. Se ci finisce, hai la conferma che la validazione vive solo nel client.
Terzo: ottieni un verdetto sull'intero repository, così sai se questo è un caso isolato o un pattern ripetuto in altri endpoint. Se il problema tecnico è chiaro e vuoi file, riga ed evidenze, il piano Diagnostic ti dà la mappa precisa dei punti da correggere.
Se hai costruito il tuo onboarding con Lovable e non hai mai controllato cosa accetta il tuo backend, questa è la settimana giusta per farlo. Carica lo ZIP del tuo repository su VibeInspect e ottieni un verdetto con le evidenze che un linter non ti darà mai.
Domande frequenti
Il mio form funziona: perché dovrei preoccuparmi di un campo facoltativo?
Perché il problema non è il funzionamento, ma cosa accetta il backend. Un campo marcato facoltativo nel frontend, se l'endpoint lo salva comunque a database senza validazione lato server, resta una superficie di rischio. Il fatto che l'app risponda correttamente non dice nulla su quali dati stai raccogliendo senza volerlo.
Un linter non basta a trovare questo tipo di problema?
No. Un linter controlla stile, tipi e sintassi, ma non capisce il significato dei dati. Per un linter un campo con la storia clinica familiare è una stringa come un'altra. Non sa che accettarlo senza consenso isolato è il rischio: guarda la forma del codice, non cosa fa con i dati.
VibeInspect corregge il codice al posto mio?
No. VibeInspect non corregge, non è un pentest e non garantisce sicurezza assoluta. Analizza il repository e produce un PDF con un verdetto. Nel piano Diagnostic ricevi file, riga ed evidenze del punto in cui l'endpoint accetta un dato che non dovrebbe, così sai esattamente dove intervenire.
Il mio codice sorgente resta sui vostri server?
No. Carichi lo ZIP del repository, l'analisi viene eseguita e il codice sorgente viene cancellato al termine. Non c'è alcun server persistente che conserva il tuo codice dopo l'audit.
Quale piano scelgo se voglio sapere dove sta il problema esatto?
Se hai un problema tecnico specifico, come un endpoint che ingerisce dati sensibili, il piano Diagnostic a 499 euro ti dà file, riga ed evidenze. Lo Snapshot a 49 euro ti dà solo score e verdetto generale, senza indicazioni di file o riga.