Vai al contenuto

La tua app Base44 è sicura?

Base44 tiene il tuo database fuori da internet, il che elimina il rischio più grande delle app costruite di fretta. Resta un elenco corto, e quasi sempre lo stesso.

Vlad Tkachenko8 min di lettura
Scheda di controllo sicurezza di Reeve per le app Base44, con il logo Base44 su un riquadro bianco.

I loghi sono di proprietà dei rispettivi titolari e sono mostrati solo per indicare la compatibilità.

In breve

  • Base44 non espone il tuo database a internet. Lo sbaglio che fa perdere dati alla maggior parte delle app costruite di fretta non è a tua disposizione, ed è un vantaggio vero.
  • Il rischio si sposta su quello che vede il browser: una API che risponde a qualunque sito e il tuo codice originale pubblicato accanto all'app. Questi due li troviamo su quasi ogni app Base44 che analizziamo.
  • Un database Base44 non lo può controllare nessuno dall'esterno, noi compresi. Se hai agganciato un tuo progetto Supabase, quella parte è controllabile e vale la pena farlo.

Base44 fa una cosa che gli altri strumenti non fanno, e vale la pena saperla prima di mettersi a cercare problemi: i tuoi dati non rispondono mai direttamente a internet.

La tua app chiede qualcosa a Base44, Base44 lo chiede al database, e la risposta torna per la stessa strada. Non esiste un indirizzo che uno sconosciuto possa digitare. Nella maggior parte delle app costruite di fretta la prima causa di dati usciti è una tabella leggibile da chiunque abbia l'indirizzo del progetto, e su Base44 quello sbaglio non è nemmeno a tua disposizione.

Ed ecco la parte che guida dopo guida racconta male: questo non rende la tua app sicura, la rende sicura su un punto preciso. Il rischio si sposta, e dove si sposta è prevedibile al punto che possiamo dirtelo adesso, prima che tu analizzi qualcosa.

Cosa Base44 tiene fuori da internet al posto tuo

Il magazzino, per restare sul paragone ovvio.

Pensa alla tua app come a un negozio. Tutto quello che il browser di un visitatore scarica è la vetrina, e viene consegnata per intero a chiunque carichi la pagina: un browser non può mostrare qualcosa che non gli è stato mandato. Dietro c'è il magazzino, i tuoi dati. Con la maggior parte degli strumenti il magazzino è un edificio a parte con un proprio indirizzo sulla stessa strada, e se gli sconosciuti possono entrarci dipende da un'impostazione che forse non hai mai visto. Su Base44 non c'è nessuna porta sulla strada.

La linea tratteggiata è il percorso che hanno gli altri strumenti. Sta qui perché tu veda cosa manca di proposito.

In pratica vuol dire che non c'è niente da incollare in un browser. Su un'app con Supabase dietro, chiunque può tirare fuori l'indirizzo del progetto dal tuo pacchetto, aggiungere il nome di una tabella e guardare cosa torna. Fai lo stesso su un'app Base44 e l'unico indirizzo che trovi è il tuo, sul tuo dominio, che risponde quello per cui la tua app è stata scritta.

Si vede nei voti. Tra le app Base44 della nostra analisi di app pubblicate quasi tutte prendono A o B, e i guasti che trascinano altri strumenti fino a una D quasi non compaiono.

Ha anche una conseguenza onesta: dall'esterno non lo può verificare nessuno, noi compresi. Un controllo da internet può provare solo porte che esistono. Qui non ce ne sono, quindi non c'è niente da riferire, e uno scanner che su questa base stampasse "database: sicuro" si starebbe inventando un risultato.

Una chiave nella tua app Base44 è un problema?

Di solito no, e i due tipi si somigliano moltissimo.

Si chiamano entrambe chiavi API. Solo una era pensata per essere letta.

Una chiave pubblicabile nomina un progetto e non fa altro. È fatta per essere letta, e trovarla non è una scoperta. Una chiave segreta, del tipo sb_secret_…, service_role o sk_live_…, aggira tutte le regole che hai scritto e può leggere e cambiare tutto.

Base44 tiene le proprie credenziali sul server, quindi una chiave che sta nella tua app di solito non è di Base44. Viene da qualcosa che hai collegato tu: una chiave di mappe, di analytics o di pagamenti incollata per far funzionare una cosa. La più comune che troviamo sulle app Base44 è una chiave API di Google, che conviene capire invece che temere, perché una senza restrizioni la possono spendere degli sconosciuti. Leggere che chiave hai richiede circa un minuto.

Se trovi davvero un segreto, l'ordine conta. Rigeneralo dove è stato emesso, in Google Cloud o Stripe o da dove sia arrivato, e toglilo dal codice dopo. Cancellare prima la riga non chiude niente: il valore vecchio sta già in ogni copia in cache del tuo sito e in quello che un crawler si è portato via la settimana scorsa.

L'impostazione sbagliata su quasi tutte le app Base44

Non una chiave, e non il database. È con chi la tua API è disposta a parlare.

Di norma un browser impedisce a un sito di leggere i dati di un altro. Quella regola è il motivo per cui una pagina che apri non può chiamare la tua banca di nascosto e metterti il saldo sullo schermo. Un'intestazione di risposta chiamata CORS la toglie, e impostata su * la toglie per tutti: un sito di cui non hai mai sentito parlare può chiamare l'API della tua app dal browser del tuo visitatore e leggere quello che torna.

Sulle app Base44 che abbiamo analizzato questa è di gran lunga la scoperta più comune. È anche quella su cui si discute di più, e la discussione è legittima, quindi ecco la versione onesta. Un jolly davanti a un indirizzo che pretende un accesso è una scoperta debole, perché l'altro sito comunque non ha credenziali da mandare. Un jolly davanti a un indirizzo che risponde a chiunque è la cosa vera, e circa metà delle app Base44 che abbiamo analizzato ha almeno un indirizzo che restituisce dati a una richiesta semplice, senza nessuno collegato. Sono due problemi diversi sotto una sola etichetta, ed è il secondo quello da andare a cercare.

Nessuno dei due è uno sbaglio tuo. Un jolly è quello che uno strumento di build consegna quando nessuno gli ha detto altro, di solito perché funzionino sia il dominio di anteprima sia quello dal vivo mentre stai costruendo. Il testo breve ha la soluzione, che consiste nel mettere il tuo dominio al posto dell'asterisco.

Il tuo codice originale, pubblicato accanto all'app

La seconda scoperta più comune, e quella che puoi controllare senza nessuno strumento.

Una source map è un file che riporta il JavaScript compresso eseguito dal browser a quello che hai scritto tu, con i nomi di file originali, i commenti e la struttura delle cartelle intatti. Gli strumenti di build le generano perché un errore in produzione punti a una riga vera invece che alla colonna 4.812 di un unico file enorme. Quella parte è davvero utile. Pubblicarle accanto all'app è la parte che ti costa qualcosa.

Circa tre app Base44 su cinque tra quelle analizzate pubblicano le proprie. Non esce nessun dato per questo, e la tua app non si comporta diversamente in niente, che è esattamente il motivo per cui passa inosservato per mesi. Quello che cambia è la fatica per tutto il resto: cavare un endpoint da un pacchetto minificato è lavoro lento e noioso, mentre leggere il tuo codice non è lavoro per niente. Ogni altra scoperta di questa pagina costa meno da trovare non appena il tuo codice è leggibile.

Il controllo richiede meno di un minuto. Apri la tua app dal vivo, premi F12 e guarda il pannello Sources. Se l'albero dei file assomiglia al tuo progetto, con i nomi che hai dato tu, le map sono uscite con la pubblicazione, e il testo lungo spiega cosa cambiare.

Se hai attaccato un database tuo

Allora il vantaggio in cima a questa pagina non vale per quella parte, e tornano le regole di sempre.

Questa immagine riguarda un database attaccato da te. I dati propri di Base44 non hanno una freccia che parte dallo sconosciuto.

Circa un quarto delle app Base44 che analizziamo nomina un progetto Supabase proprio. Quel progetto risponde direttamente a internet, esattamente come per ogni altro strumento, quindi Row Level Security adesso è affar tuo: un interruttore per tabella che decide riga per riga chi può leggere cosa.

Due cose decidono se ce l'hai. Supabase la attiva di default per le tabelle create nel Table Editor del pannello, e non per quelle create eseguendo SQL, che è come le crea la maggior parte delle configurazioni generate. E l'interruttore è solo metà della storia, perché una policy che permette a tutti lascia la tabella aperta mentre il pannello la dà per protetta.

Con lo storage funziona uguale e ci si dimentica facilmente, perché sta in una parte del pannello diversa dalle regole delle tabelle. Un bucket segnato pubblico lo può elencare e scaricare chiunque sappia che c'è, che la tua app punti o no a un file dentro, e le impostazioni che lo decidono meritano una lettura con calma.

Come controllare la tua app Base44 in una decina di minuti

Chiedi cosa dice la tua API agli altri siti. È la cosa più probabilmente sbagliata e quella che nessuno guarda, perché nella tua app non si comporta male niente quando è impostata troppo larga.

Apri la tua app dal vivo con F12 e leggi il pannello Sources. Se i tuoi file sono elencati lì con i loro nomi, chiunque altro li può elencare uguale.

Leggi ogni chiave presente nell'app. Per ciascuna, chiediti se la metteresti sulla tua home page. Se la risposta è no, il suo posto è su un server, e va rigenerata alla fonte prima di sparire dal codice.

Apri Authentication → Policies, se hai collegato un tuo progetto Supabase. Qualunque tabella elencata con Row Level Security disattivata risponde a chi ha l'indirizzo del progetto, e quell'indirizzo sta nella tua app.

Poi guarda da fuori. I passaggi qui sopra ti dicono cosa è configurato. Cosa riesce davvero a raggiungere uno sconosciuto è un'altra domanda, ed è quella a cui risponde il nostro controllo gratuito. Legge il tuo sito dal vivo come un visitatore e ti dà un voto in circa 20 secondi, senza account: controlla la tua app.

Cosa fare

  • Base44 tiene il tuo database fuori da internet. La prima causa di dati usciti nelle app costruite di fretta non è a tua disposizione.
  • Dall'esterno non lo può verificare nessuno, noi compresi. Nessuna porta vuol dire nessun risultato, e nessun risultato non è una spunta verde.
  • Il rischio si sposta nel browser: una API che risponde a qualunque sito e il tuo codice sorgente pubblicato accanto all'app.
  • Un jolly davanti a un indirizzo che non chiede di accedere è la versione che conta, e circa metà di queste app ne ha uno.
  • Una chiave nel tuo pacchetto di solito viene da un servizio che hai collegato tu. Rigenerala alla fonte, poi cancellala dal codice.
  • Attacca un tuo progetto Supabase e le solite regole di Row Level Security e di storage valgono per intero anche lì.

Comincia dalle due che quasi sempre vale la pena sistemare: cosa dice la tua API agli altri siti, e se il tuo codice originale è uscito insieme all'app. Poi la checklist di sicurezza da 10 minuti copre il resto.

Cosa può andare storto davvero in un'app Base44

In ordine di quanto lo vediamo davvero sulle app Base44, che non è l'ordine che ti aspetteresti. Niente di tutto questo vuol dire che hai sbagliato.

  • La tua API risponde a qualunque sito lo chieda

    Questo è il caso comune su Base44, di gran lunga. Di norma un browser impedisce a un sito di leggere i dati di un altro, e un'impostazione chiamata CORS è ciò che toglie quella regola. Impostata su "*", la toglie per tutti: una pagina di cui non hai mai sentito parlare può chiamare l'API della tua app dal browser di un visitatore. Reeve controlla cosa dice la tua app ai browser su questo punto.

  • Il tuo codice originale è uscito insieme all'app

    Una source map è una copia leggibile del codice che hai scritto, pubblicata accanto alla versione che il browser esegue. Comoda mentre costruisci, un regalo a uno sconosciuto una volta online: trasforma "frugare in un pacchetto minificato" in "leggere l'app". Da sola non fa uscire dati. Rende tutto il resto più facile da trovare.

  • Intestazioni di sicurezza mancanti

    Una manciata di intestazioni dicono al browser come proteggere i tuoi visitatori: non indovinare i tipi di file, non lasciare che un altro sito incornici questa pagina, non far uscire l'indirizzo completo quando si esce. Prese singolarmente sono piccole. Insieme decidono quanto qualcuno può fare con ciò che trova altrove.

  • Una chiave di qualcosa che hai collegato tu

    Base44 tiene le proprie credenziali sul server, quindi le chiavi che compaiono di solito vengono da un servizio che hai collegato tu: una chiave di mappe, di analytics o di pagamenti incollata per far funzionare una funzione. Alcune chiavi devono stare nel browser e va benissimo. Reeve legge il codice caricato della tua app, trova le chiavi e ti dice quale è quale, senza mai salvare i valori veri.

  • Un database che hai collegato tu

    Se hai agganciato un tuo progetto Supabase invece di usare i dati integrati di Base44, ti sei preso anche le sue regole. Row Level Security decide chi può leggere ogni riga, ed è disattivata di default per le tabelle create eseguendo SQL. È l'unica strada per cui il classico problema del database aperto arriva comunque a un'app Base44. Reeve controlla contando le righe, mai leggendole.

  • File che chiunque può elencare

    I caricamenti finiscono in "bucket" di archiviazione, e un bucket pubblico lascia che chiunque elenchi e scarichi quello che c'è dentro: fatture, documenti, foto private. Reeve controlla se i tuoi bucket sono elencabili. Non scarica mai i file di nessuno.

Cosa è Reeve e cosa non è

Reeve è un controllo gratuito, in sola lettura, dall'esterno, come un ispettore che prova le porte senza entrare. Trova in fretta gli errori comuni e gravi. Non è un audit di sicurezza completo, e un buon voto non è una garanzia; vuol dire che le porte evidenti sono chiuse.

Le app Base44 prendono voti migliori della media, e questo è un risultato vero più che un complimento: la piattaforma si tiene la parte che di solito va storta. Quello che resta è un elenco corto e piuttosto uniforme, ed è una buona notizia, perché un elenco corto si può finire. E se preferisci che il controllo non sia il tuo lavoro, facciamolo diventare il nostro.

Lo vuoi risolto, non solo controllato?

Reeve Care tiene d'occhio la tua app, fa copie dei tuoi dati e ti aiuta a sistemare quello che si rompe, così puoi continuare a costruire invece di preoccuparti.

Scopri Reeve Care

FAQ

Un'app Base44 è più sicura di una fatta altrove?

Su una cosa precisa, sì. Il tuo database non è raggiungibile da internet, quindi non puoi commettere l'errore che espone la maggior parte delle app costruite di fretta: una tabella leggibile da chiunque conosca l'indirizzo. È la causa principale dei dati usciti da app come la tua, e Base44 te la toglie di mano. Tutto quello che vede un browser resta affar tuo.

Reeve può controllare il mio database Base44?

No, e dall'esterno non può nessuno. I tuoi dati passano dal backend di Base44 invece di rispondere direttamente a internet, quindi non c'è una porta da provare. Lo diciamo anche sulla nostra pagina di ricerca, e preferiamo dirtelo piuttosto che stampare una spunta verde che non ci siamo guadagnati. Se hai collegato un tuo progetto Supabase, quella parte possiamo controllarla.

La mia app ha una chiave API dentro. È un problema?

Dipende del tutto da quale. Alcune sono pensate per essere pubbliche e la tua app senza non funziona; altre consegnano un account intero. Base44 tiene le proprie credenziali sul server, quindi una chiave nel tuo pacchetto di solito viene da un servizio che hai collegato tu. Reeve legge il tipo di chiave e ti dice a parole quale hai, senza salvare il valore.

Controllare la mia app Base44 cambierà qualcosa?

No. Reeve guarda solo quello che è già pubblico dall'esterno. Non fa mai il login, non cambia mai niente e non scarica mai i tuoi file. Sola lettura, come controllare se una porta è chiusa senza entrare.

Se il mio database non è raggiungibile, resta qualcosa di cui preoccuparsi?

Sì, ma un elenco più corto di quello della maggior parte. La tua app gira comunque in un browser, e tutto quello che il browser riceve è pubblico: il codice, le chiavi incorporate e gli indirizzi che chiama. Vale la pena controllare due cose: se quegli indirizzi rispondono a richieste di altri siti, e se insieme alla pubblicazione è uscita una copia leggibile del tuo codice sorgente.

Se dall'esterno non lo può controllare nessuno, come faccio a sapere che i miei dati stanno bene?

Da dentro, che è l'unico posto dove quella risposta esiste. Siccome le richieste passano da Base44 invece di andare a un indirizzo pubblico, tutto quello che decide chi può leggere cosa vive nella tua app e nella piattaforma, dove uno sconosciuto non può andare a tastare. Quindi le domande utili sono chi può registrarsi, cosa vede una persona registrata, e se qualche schermata è stata costruita dando per scontato che nessuno guardasse. Un controllo esterno non risponde a nessuna di queste. Risponde all'altra metà: cosa raggiunge qualcuno senza nemmeno registrarsi.

Il controllo dice che la mia API risponde a qualunque sito. Sono stato io?

Quasi certamente non di proposito. Un jolly è quello che uno strumento di build consegna quando nessuno gli ha detto altro, di solito perché funzionino sia l'indirizzo di anteprima sia quello dal vivo mentre stai costruendo, e sopravvive fino in produzione perché nella tua app non si rompe niente quando è troppo largo. Quanto pesa lo decide l'indirizzo che sta dietro: se chiede di accedere, la scoperta è debole. Se risponde a chiunque, è la versione da sistemare questa settimana.

Ho collegato un mio progetto Supabase alla mia app Base44. Cambia qualcosa?

Cambia la cosa più importante. Il tuo progetto risponde direttamente a internet, quindi l'impostazione Row Level Security tabella per tabella adesso è affar tuo, ed è disattivata di default su qualunque tabella creata eseguendo SQL. È l'unica strada per cui il classico problema del database aperto arriva a un'app Base44, e vale dieci minuti del tuo tempo.

Scritto da

Vlad Tkachenko

Fondatore di Reeve

Passo le giornate a guardare app costruite con Lovable, Bolt, v0, Cursor e Replit, e la breve lista di errori che vi ricompaiono di continuo.

Altro sull'autore

Costruita altrove? Abbiamo lo stesso quadro onesto per:

← Vedi tutte le guide sulla sicurezza dei creatori

Controllo esterno automatizzato, non un audit completo. L'assenza di risultati non è una garanzia di sicurezza.