Vai al contenuto

La sicurezza delle app vibe-coded nel 2026

30.998app online
9controlli passivi
12–14 agofinestra della scansione
19 ago 2026prima edizione
Ricerca Reeve

Abbiamo cercato app online costruite con Lovable, Bolt, v0, Replit o Base44, poi le abbiamo passate tutte agli stessi nove controlli che chiunque può fare gratis dalla home page di Reeve. Questa pagina è quello che ne è venuto fuori.

La tua app può essere in questo campione. Qui non viene nominata, quindi l'unico modo per vedere a che punto è resta farle gli stessi nove controlli

Solo uno sguardo da fuori. Leggiamo quello che il browser di un visitatore legge già: il codice che l'app spedisce, gli header che restituisce, gli indirizzi che nomina nel proprio codice. Nessun login, nessuna password indovinata, niente di scaricato. Metodo ↓

Qui non è nominata nessuna app, né nel file dei dati. Ogni cifra porta con sé il metodo che l'ha prodotta, e il file in fondo raccoglie tutti gli aggregati in una tabella, se vuoi rifare i conti.

Ogni app, con un voto

452 app, circa una su 69, sono in D o F
A23.62176% , voto A, 23.621 app
B495816% , voto B, 4958 app
C19676% , voto C, 1967 app
D4441% , voto D, 444 app
F8<1% , voto F, 8 app

Sei numeri che raccontano la storia

Queste sei cifre sono il rapporto. Tutto quello che viene dopo è la base su cui poggia ciascuna, e come l'abbiamo ottenuta.

  1. Header di sicurezza1/6
    99%

    delle 30.998 app analizzate aveva almeno un riscontro. Quasi tutti moderati, e a quasi tutte mancano header di sicurezza del browser.

  2. Accesso al database2/6
    57%

    delle app con Supabase che siamo riusciti a raggiungere lasciava leggere a un estraneo almeno una tabella senza accedere: 2096 su 3680.

  3. Accesso al database3/6
    394

    app avevano una tabella leggibile il cui nome sembra di dati personali: users, profiles, orders. Una richiesta, senza password.

  4. Segreti esposti4/6
    1su23

    app spediscono una chiave segreta nel codice pubblico: 1332 in totale. Solo 3 hanno spedito la chiave principale del database, molto più raro di quanto suggerisca l’allarme.

  5. Source map5/6
    13%

    pubblicano le source map: il codice originale dell’app, leggibile negli strumenti per sviluppatori di qualsiasi browser. Sono 3885 app.

  6. Distribuzione dei voti6/6
    76%

    prendono una A. Le basi in genere reggono, e i guasti seri si concentrano in un punto solo: il database.

Le impostazioni predefinite delle piattaforme falliscono quasi ovunque, e la maggior parte di quei fallimenti è moderata. Quello che può cambiare solo chi ha costruito l'app fallisce molto più di rado, ed è quello che mette i dati di altre persone su internet aperta.

Che voto prendono queste app, dalla A alla F

Reeve dà un voto a un'app come fa una pagella. Le detrazioni partono da cento e pesano per gravità. Poi il riscontro più grave fissa un tetto: con un riscontro critico l'app non va oltre la D, con uno alto non va oltre la C.

Come si classificano tutte le app che abbiamo potuto valutare

23.621 · 76% , voto A, 23.621 app
4958 · 16% , voto B, 4958 app
1967 · 6% , voto C, 1967 app
444 · 1% , voto D, 444 app
8 · <1% , voto F, 8 app

Sono 452 app con un buco da cui un estraneo può entrare oggi.

La maggior parte delle app finisce in A o B. La fascia di D e F è piccola. Sono le app in cui uno sconosciuto può già leggere le righe di qualcun altro.

Cosa abbiamo controllato, e quante app hanno fallito ogni controllo

Ogni controllo fa una domanda sull'app vista da fuori, ed è contato sulle app in cui ha ottenuto una risposta. Un'app che un controllo non è riuscito a raggiungere resta fuori dalla base di quel controllo, invece di essere contata come pulita. Per quelle app la scansione dice che non è riuscita a controllarle, e questa pagina fa lo stesso.

Scorri di lato per vedere la quota e il caso peggiore.

Riscontri per controllo
ControlloAppSuQuotaCaso peggiore
Header di sicurezzaProtezioni del browser che la piattaforma di hosting dovrebbe inviare30.75630.98199%fino a Medio
Condivisione tra sitiL’API dell’app risponde a qualsiasi sito lo chieda686730.92622%fino a Alto
Source mapIl codice originale pubblicato accanto all’app388530.98713%fino a Medio
Accesso al databaseTabelle del database leggibili senza accedere209626.2498%fino a Critico
Segreti espostiChiavi che stanno su un server, spedite ai browser133230.9984%fino a Critico
Bucket di archiviazioneArchivio file che chiunque può elencare dall’esterno79227.2693%fino a Alto
Rinnovo del dominioRegistrazione in scadenza, o già scaduta5530.980<1%fino a Alto
Certificato SSLCertificato scaduto, in scadenza o non attendibile3230.851<1%fino a Alto
File privatiFile di configurazione e dump lasciati su percorsi pubblici830.749<1%fino a Critico

Ogni quota è calcolata sulle app a cui quel controllo ha potuto rispondere. Il punto è la versione peggiore del problema vista nella riga, non quella tipica.

Due righe fanno più paura di quanta ne meritino. Gli header di sicurezza sono istruzioni che la piattaforma di hosting manda al browser, e se ne manca uno una classe di attacchi si ritrova un ostacolo in meno davanti. Una source map pubblicata è il codice originale dell'app posato accanto alla versione compilata: mostra a un attaccante dove guardare, e da sola non consegna nulla.

Una riga può anche sembrare grave perché una manciata di app al suo interno ha spedito qualcosa di serio mentre le altre hanno spedito qualcosa di ordinario. Il file dei dati apre ogni riga per tipo di chiave, così si vede qual è quale.

Più della metà delle app Supabase controllabili lascia leggere i dati delle tabelle

È la cifra su cui siamo tornati di continuo.

Un progetto Supabase è aperto a internet per come è fatto. L'app che gira nel browser parla direttamente con il database, usando una chiave che deve essere pubblica, e ciò che sta fra uno sconosciuto e le righe è Row Level Security: una regola su ogni tabella. Disattiva quella regola, o scrivi una policy che fa entrare tutti, e qualsiasi tabella del progetto si legge con una richiesta e senza password.

57% 2096 su 3680

8429 app di questa rilevazione indicano un progetto Supabase. Il nostro controllo ha ottenuto una risposta da 3680 di esse; le altre stanno dietro backend che non sondiamo, quindi non ne diciamo nulla. Di quelle 3680, 2096 avevano almeno una tabella che un estraneo può leggere con una sola richiesta e senza password.

Meno della metà delle app che nominano un progetto Supabase si riesce a controllare. Alcune mandano il traffico del database attraverso il proprio backend, dove un controllo da fuori non può seguirle, quindi su quelle non diciamo nulla. La quota qui sopra è calcolata sulle app che hanno risposto.

1702 app espongono tabelle con nomi generici o tecnici: settings, content, logs.

394 app espongono tabelle con nomi da dati personali: users, profiles, orders, messages.

La divisione è la parte utile. Una tabella leggibile che si chiama settings o content è un errore. Una tabella leggibile che si chiama users, profiles o orders contiene dati personali di altre persone su internet aperta, e chi ha costruito l'app quasi certamente li crede privati.

Il controllo non legge mai una riga. Chiede al database quante righe sarebbero visibili e rilegge il conteggio da un header della risposta. Basta a distinguere una tabella con una regola RLS da una senza, e il controllo non va oltre.

Gli stessi nove controlli, strumento per strumento

Ogni app è raggruppata per lo strumento con cui è stata pubblicata, e misurata contro le altre app di quello strumento.

Scorri di lato per vedere le due colonne Supabase.

Per strumento, solo sui domini di pubblicazione predefiniti
StrumentoAppCon riscontriVoti D–FUsano SupabaseDatabase leggibile
Lovable18.55499%2% 407 app35%57%su 3553
Base445438100%<1% 2 app27%troppo poche app verificabili per pubblicare una quota
Replit304299%<1% 9 app1%troppo poche app verificabili per pubblicare una quota
v01790100%0% 0 app1%troppo poche app verificabili per pubblicare una quota
Bolt1123100%1% 15 app24%77%su 35

L’ultima colonna è la quota delle app con Supabase di quello strumento su cui il nostro controllo ha potuto rispondere, con quella base indicata accanto. Un trattino significa che le app verificabili erano troppo poche per pubblicare una quota. Trattalo come un vuoto nei nostri dati, e non trarne conclusioni su quanto siano sicure quelle app.

La riga contrassegnata instrada il traffico del proprio database attraverso il backend dello strumento stesso, dove un controllo dall’esterno non può seguirlo. Quelle app restano non misurate qui.

Le app su dominio personalizzato non si possono ricondurre a uno strumento dall’esterno e restano fuori da questa tabella.

Quasi tutto ciò che questa tabella confronta sono impostazioni predefinite. Nessuno sceglie Lovable o Bolt per i suoi header di sicurezza. Li imposta la piattaforma per ogni app che ospita, quindi un solo cambiamento lì muove un'intera colonna di questa tabella.

Due limiti, prima che qualcuno citi una riga. Attribuiamo le app in base al dominio di pubblicazione, quindi un'app passata a un dominio personalizzato resta del tutto fuori da questa tabella, e spesso quelle sono le più finite. E uno strumento che instrada il traffico del database attraverso il proprio backend non è controllabile dall'esterno per niente. Un vuoto lì vuol dire che non siamo riusciti a misurare, e non dice nulla su quanto siano sicure quelle app.

Due tipi di riscontro, due tipi di correzione

I riscontri di questa pagina finiscono in due gruppi, e i due hanno bisogno di mani diverse.

Ciò che controlla la piattaforma

fino a Alto

Quando a quasi tutte le app ospitate nello stesso posto manca lo stesso header, non sono decine di migliaia di persone che sbagliano allo stesso modo. Arriva con l’hosting, e un solo cambiamento della piattaforma le sistemerebbe tutte.

  • Header di sicurezza99%
  • Source map13%
  • Rinnovo del dominio<1%
  • Certificato SSL<1%

Ciò che controlli solo tu

fino a Critico

Nessuna piattaforma di hosting può sapere quali delle tue tabelle devono essere pubbliche, né quale chiave sta su un server. Ogni riscontro critico di questo rapporto è da questa parte.

  • Condivisione tra siti22%
  • Accesso al database8%
  • Segreti esposti4%
  • Bucket di archiviazione3%
  • File privati<1%

Il primo gruppo è una decisione di prodotto presa in un'azienda. Una sola modifica a un'impostazione predefinita dell'hosting muove in un colpo tutte le app di quella piattaforma, ed è per questo che quelle righe vengono fuori così uniformi e sono le più economiche da correggere.

Il secondo gruppo è nelle mani di chi ha costruito l'app. Nessuna piattaforma di hosting può sapere quali delle tue tabelle devono essere pubbliche, né quale chiave sta su un server. Ogni riscontro critico di questo rapporto è in quel gruppo. Le guide di sicurezza per strumento e la checklist di lancio partono entrambe da lì.

Cosa fanno bene i vibe-coder

Abbiamo contato anche quello che passa, sulle stesse app.

96%non spediscono alcun segreto nel loro codice pubblico.

97%dell’archivio che abbiamo potuto controllare è chiuso agli estranei.

99%servono un certificato valido.

Una chiave pubblicabile nel frontend è al suo posto. Le segnaliamo come OK e spieghiamo perché.

L'ultima scheda è quella che gli scanner generici sbagliano. Una chiave pubblicabile nel frontend (una chiave anon di Supabase, una chiave pubblicabile di Stripe) è al suo posto: è fatta per essere letta, e la protezione sta nelle regole che le stanno dietro. Segnalarla manda qualcuno a cambiare un'impostazione che era già giusta.

Come abbiamo misurato, e dove sono i limiti

Da dove vengono le app

Tre elenchi, uniti e ripuliti dai doppioni: app che la gente ha postato su X e Reddit, app lanciate su Show HN, e app che abbiamo enumerato dai domini di pubblicazione degli strumenti stessi. I domini di pubblicazione sono il grosso del campione e l'unico elenco che scala. Gli altri due trovano solo un'app di cui qualcuno ha scelto di parlare.

Gli host morti sono usciti per primi, e lo abbiamo giudicato leggendo la pagina stessa. Un deploy cancellato spesso risponde ancora con un allegrissimo 200 OK.

La regola del denominatore

Ogni quota di questa pagina è calcolata sulle app a cui quel controllo ha potuto rispondere, mai sul campione intero. Un controllo che non è riuscito a raggiungere un'app lascia quell'app fuori dalla propria base, e non la conta mai come pulita. I due numeri accanto a ogni barra sono quella base, così chiunque veda quale sta leggendo.

56 app hanno restituito troppo poco per essere classificate in un senso o nell’altro. Restano fuori da ogni numero di questa pagina invece di essere contate come pulite.

I voti sono contati su un numero più piccolo per lo stesso motivo. Un'app che ha restituito troppo poco per essere classificata esce da ogni cifra qui sopra, invece di essere valutata tirando a indovinare.

Cosa abbiamo fatto, e cosa no

  • Solo letture passive: le richieste che il browser di un visitatore fa già, più gli indirizzi pubblici a cui l'app stessa punta.
  • Il controllo sul database prende un conteggio di righe da un header della risposta. Non abbiamo mai letto una riga, scaricato un file, fatto login o indovinato una password.
  • Nessuna app è nominata, qui o nel file dei dati. Un elenco di app abbinate alle loro debolezze è un elenco di bersagli, e non ne teniamo uno in forma pubblicabile.

Limiti da tenere presenti

  • Il campione pende verso le app più recenti. Un'app passata a un dominio personalizzato non si può ricondurre a uno strumento dall'esterno, e spesso quelle sono le più affermate.
  • Il colore di una riga segna il caso peggiore che abbiamo visto, che può essere un'app su centinaia. Il file dei dati apre ogni riga per tipo esatto di chiave.
  • Questa è una finestra di tre giorni di agosto. Un'app sistemata la settimana dopo qui conta ancora com'era il giorno in cui l'abbiamo guardata.
  • Un controllo esterno automatico non è un audit. L'assenza di riscontri non è una garanzia.

Usate questi numeri

Giornalisti, ricercatori e chiunque scriva di questo possono riusare i dati citando la fonte. Il file qui sotto contiene tutti gli aggregati di questa pagina in una sola tabella piatta, e non nomina nessuna app.

Reeve. The State of Vibe-Coded App Security 2026. 30.998 app online analizzate 12 agosto 2026 – 14 agosto 2026. reeve.page/research/vibe-coded-app-security-2026

Scarica i dati (CSV)

Dati con licenza CC BY 4.0: riusali liberamente citando Reeve con un link. Il file contiene tutti gli aggregati di questa pagina e non nomina nessuna app.

10

Domande

Potete dirmi quali app avevano quali problemi?

No. Solo conteggi e quote, mai nomi, e il file dei dati contiene esattamente quello che la pagina mostra. Un elenco di app abbinate alle loro debolezze è un elenco di bersagli, e non lo produrremo.

La mia app potrebbe essere in questi dati. Cosa faccio?

Scansionala tu. Sono gli stessi nove controlli, richiedono una ventina di secondi e ti danno il voto insieme a quello che uno sconosciuto vede già. Niente in questa pagina identifica nessuno, quindi è l'unico modo per sapere a che punto sei.

Una tabella del database leggibile è davvero così grave?

Se chiunque su internet può tirare fuori quelle righe con una richiesta e senza password, sì. Una tabella leggibile che si chiama settings è sciatteria. Una tabella leggibile che si chiama users o orders è una fuga di dati che ancora nessuno ha notato.

Perché considerate normali le chiavi pubblicabili?

La chiave anon di Supabase deve essere pubblica. La protezione sta nelle regole del database dietro di lei, non nella chiave stessa. Gli strumenti che segnalano quelle chiavi insegnano alla gente a saltare l'avviso successivo, che magari è quello che conta.

Rifarete questa analisi?

Sì. Le scansioni continuano e la prossima edizione arriva da lì. Il file dei dati registra la finestra da cui vengono queste cifre, così una copia vecchia non passa per attuale.

Dove si colloca la tua app?

Gli stessi nove controlli, sulla tua app, gratis. Un voto e un rapporto in linguaggio semplice in circa 20 secondi.

Report di sicurezzayour-app.com
C

Voto · Punteggio 72/100

Chiavi segreteUna chiave segreta è esposta nel tuo codiceAlto
Protezione del databaseLa row-level security è attivaOK
Scansiona la tua app gratis