[{"data":1,"prerenderedAt":726},["ShallowReactive",2],{"blog-it-stripe-secret-key-in-frontend":3,"blog-index-it":483},{"id":4,"title":5,"body":6,"category":436,"cover":437,"coverAlt":438,"description":439,"draft":440,"extension":441,"faq":442,"image":461,"keywords":462,"meta":470,"navigation":471,"ogTitle":472,"path":473,"published":474,"seo":475,"stem":476,"tldr":477,"updated":474,"__hash__":482},"blog_it\u002Fblog\u002Fstripe-secret-key-in-frontend.md","Una chiave segreta Stripe nel frontend può muovere denaro",{"type":7,"value":8,"toc":424},"minimark",[9,18,33,42,47,55,58,63,68,71,75,78,182,193,203,207,210,213,219,226,229,232,236,239,273,276,281,284,287,291,294,301,304,307,311,322,331,336,339,355,359,392,395,402],[10,11,12,13,17],"p",{},"Apri la tua app in produzione in un browser, guarda il sorgente della pagina e\ncercaci dentro ",[14,15,16],"code",{},"sk_live_",". Se torna una stringa lunga, hai una chiave segreta\nStripe esposta nel tuo frontend, e qualsiasi visitatore tu abbia mai avuto\navrebbe potuto copiarla.",[10,19,20,21,25,26,29,30,32],{},"Ecco il punto in cui i consigli generici sulle chiavi API sbagliano: Stripe ti\ndà due chiavi attive, si somigliano quasi in tutto, e ",[22,23,24],"strong",{},"una delle due deve\nstare nella tua app."," La chiave che inizia con ",[14,27,28],{},"pk_live_"," sta lì per\nprogetto. La chiave che inizia con ",[14,31,16],{}," ha, con le parole di Stripe,\npermessi senza limiti su tutte le API. Differiscono per un carattere in mezzo a\nuna stringa lunga, ed è lì la maggior parte del motivo per cui questa cosa\ncontinua a succedere.",[10,34,35,36,41],{},"Tra il 12 e il 14 agosto 2026 abbiamo passato nove controlli esterni su 30.998\napp in produzione costruite con Lovable, Bolt, v0, Replit e Base44. Tre di esse\nspedivano una chiave segreta Stripe attiva, e altre due una con restrizioni, il\nche ne fa una delle cose più rare emerse dalla scansione; gli stessi nove\ncontrolli hanno trovato una chiave API Google in 1.142 app. Tutte e tre le\nchiavi segrete sono uscite con voto D, perché un singolo rilievo critico mette\nun tetto al voto lì, per quanto bene sia tutto il resto. I numeri completi sono\nnel ",[37,38,40],"a",{"href":39},"\u002Fresearch\u002Fvibe-coded-app-security-2026","nostro rapporto di scansione",".",[43,44,46],"h2",{"id":45},"una-chiave-segreta-stripe-esposta-nel-frontend-è-un-problema","Una chiave segreta Stripe esposta nel frontend è un problema?",[10,48,49,50,52,53,41],{},"Sì, se la stringa inizia con ",[14,51,16],{},". No, se inizia con ",[14,54,28],{},[10,56,57],{},"Stripe emette due chiavi attive perché le due metà di un pagamento avvengono in\ndue posti diversi. Immagina il bancone di un negozio. Il POS è rivolto verso il\ncliente ed è avvitato bene in vista, e il peggio che uno sconosciuto possa\nfarci è pagarti. La cassa dietro il bancone è tutto un altro oggetto. Si apre,\ncontiene l’incasso della giornata, e nel cassetto sotto c’è una scheda per ogni\ncliente con l’indirizzo scritto sopra.",[10,59,60,62],{},[14,61,28],{}," è il POS. Il suo lavoro è costruire un modulo di pagamento dentro il\nbrowser di qualcun altro, e la documentazione di Stripe dice che le chiavi\npubblicabili si possono esporre senza problemi nel codice frontend.",[10,64,65,67],{},[14,66,16],{}," è la chiave della cassa. Stripe descrive le chiavi segrete come\ndotate di permessi senza limiti su tutte le API, che è la stessa frase letta\ndall’altro lato: non c’è nulla nel tuo account che non riesca a raggiungere.",[10,69,70],{},"La tua app ha bisogno del POS nel browser anche solo per incassare. Della chiave\ndella cassa non dovrebbe avere bisogno mai.",[43,72,74],{"id":73},"pk_live_-e-sk_live_-come-distinguerle","pk_live_ e sk_live_: come distinguerle",[10,76,77],{},"Leggi il secondo carattere del prefisso. È tutto qui il test.",[79,80,81,100],"table",{},[82,83,84],"thead",{},[85,86,87,91,94,97],"tr",{},[88,89,90],"th",{},"Chiave",[88,92,93],{},"Inizia con",[88,95,96],{},"Sicura nel browser?",[88,98,99],{},"Cosa fa",[101,102,103,124,143,160],"tbody",{},[85,104,105,109,114,121],{},[106,107,108],"td",{},"Pubblicabile",[106,110,111],{},[14,112,113],{},"pk_live_…",[106,115,116],{},[117,118,120],"key-verdict",{"type":119},"safe","Sta qui",[106,122,123],{},"Costruisce il modulo di pagamento e tokenizza una carta. Non legge clienti e non muove denaro.",[85,125,126,129,134,140],{},[106,127,128],{},"Segreta",[106,130,131],{},[14,132,133],{},"sk_live_…",[106,135,136],{},[117,137,139],{"type":138},"danger","Mai",[106,141,142],{},"Permessi senza limiti su tutte le API di Stripe, su tutto il tuo account.",[85,144,145,148,153,157],{},[106,146,147],{},"Con restrizioni",[106,149,150],{},[14,151,152],{},"rk_live_…",[106,154,155],{},[117,156,139],{"type":138},[106,158,159],{},"Solo i permessi spuntati alla creazione. Resta una credenziale valida in mano a un estraneo.",[85,161,162,165,174,179],{},[106,163,164],{},"Di test",[106,166,167,170,171],{},[14,168,169],{},"sk_test_",", ",[14,172,173],{},"pk_test_",[106,175,176],{},[117,177,178],{"type":138},"No",[106,180,181],{},"Tocca solo il tuo ambiente di prova. Un problema più piccolo con la stessa abitudine dietro.",[10,183,184,185,188,189,192],{},"La parte centrale del prefisso è la seconda cosa da leggere. ",[14,186,187],{},"_test_"," non\nraggiunge nulla oltre il tuo ambiente di prova, quindi una chiave di test\ntrapelata non ti costa denaro; pubblica comunque come è costruita la tua\nintegrazione, e l’indicazione di Stripe è di trattare come compromessa\nqualsiasi chiave segreta o con restrizioni vista dove non doveva stare. Gli\naccount più recenti possono portare anche una chiave di organizzazione che\ninizia con ",[14,190,191],{},"sk_org_"," e che opera su più di un account Stripe insieme. Segue la\nstessa regola, e una fuga lì arriva più lontano di un singolo account.",[194,195,197],"callout",{"type":196},"warn",[10,198,199,202],{},[22,200,201],{},"Non si rompe niente quando incolli quella sbagliata."," Un checkout costruito\ncon la chiave segreta funziona. I pagamenti arrivano, la dashboard si riempie, e\nl’app si comporta esattamente come si sarebbe comportata con la chiave\npubblicabile, perché la chiave segreta può fare tutto quello che può fare la\npubblicabile e parecchio altro. Non c’è nessun errore da notare e nessun avviso\nda chiudere, ed è per questo che questo rilievo di solito ha mesi quando\nfinalmente qualcuno lo legge da una scansione.",[43,204,206],{"id":205},"cosa-può-fare-qualcuno-con-una-chiave-segreta-stripe-trapelata","Cosa può fare qualcuno con una chiave segreta Stripe trapelata",[10,208,209],{},"Tutto quello che puoi fare tu nella tua dashboard e che non richieda la\npassword.",[10,211,212],{},"Non \"ottenere accesso non autorizzato\". In concreto, con nient’altro che la\nstringa e un terminale: leggere l’elenco completo dei tuoi clienti, con nomi,\nindirizzi email, indirizzi di fatturazione e le ultime quattro cifre di ogni\ncarta. Leggere ogni pagamento che hai mai incassato, e per cosa ha pagato ogni\ncliente. Emettere rimborsi. Creare addebiti e link di pagamento a tuo nome.\nDisdire abbonamenti.",[214,215],"diagram",{"alt":216,"caption":217,"src":218},"Una griglia con quattro righe di icone sulla sinistra: un POS, tre persone, due monete impilate e una pila di righe di tabella. Due colonne hanno come intestazione pk_live_ e sk_live_. Nella colonna pk_live_ la riga del POS ha un segno di spunta verde e le altre tre righe hanno croci sbiadite. Nella colonna sk_live_ tutte e quattro le righe hanno segni di spunta rossi.","Le due chiavi stanno nello stesso file. La seconda colonna è quello che compra il carattere in più, e ogni spunta rossa lì è una richiesta che va a buon fine.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fwhat-each-key-can-do-1600x820.png",[10,220,221,222,225],{},"Poi c’è l’uso che non ha niente a che fare con te. Il tuo account diventa un\nposto dove fare ",[22,223,224],{},"card testing",", il termine di Stripe stesso per un truffatore\nche fa passare numeri di carta rubati attraverso l’integrazione di chiunque per\ntrovare quelli ancora validi. Le carte sono di altre persone. I rifiuti, le\ncontestazioni e le spiegazioni sono tuoi.",[10,227,228],{},"Quello che in genere non possono fare è pagare se stessi. Un rimborso torna\nsulla carta che ha fatto il pagamento originale, e un bonifico va sul conto\nbancario registrato, che è il tuo. Sembra una buona notizia e non lo è:\nsignifica che il danno arriva come denaro tuo che se ne va, schede dei tuoi\nclienti copiate e il tuo account usato per la truffa di qualcun altro, invece\nche come un bonifico da indicare e inseguire.",[10,230,231],{},"Niente di tutto questo richiede un attaccante sofisticato. La documentazione di\nStripe dice che ci sono soggetti fraudolenti che scandagliano di continuo le\nbasi di codice pubbliche in cerca di chiavi esposte, e quegli scanner non hanno\nbisogno di sapere chi sei per trovare la tua.",[43,233,235],{"id":234},"come-rigenerare-una-chiave-segreta-stripe-senza-fermare-i-pagamenti","Come rigenerare una chiave segreta Stripe senza fermare i pagamenti",[10,237,238],{},"Crea prima la sostituta, mettila in produzione e solo dopo fai scadere la\nvecchia. In quest’ordine.",[240,241,242,249,255,261,267],"ol",{},[243,244,245,248],"li",{},[22,246,247],{},"Nella dashboard di Stripe, crea una nuova chiave segreta."," Per ora lascia stare la vecchia; funzionano entrambe insieme, e quella sovrapposizione è ciò che tiene in piedi il tuo checkout.",[243,250,251,254],{},[22,252,253],{},"Metti la chiave nuova dove viveva la vecchia",", e dovrebbe essere un server, una Edge Function o una route serverless. Mai l’app che scarica il browser.",[243,256,257,260],{},[22,258,259],{},"Fai il deploy, poi incassa un pagamento reale."," Un addebito che va a buon fine è l’unica prova che la chiave nuova sia collegata bene.",[243,262,263,266],{},[22,264,265],{},"Fai scadere la chiave vecchia."," Stripe lo descrive proprio così: far scadere una chiave segreta o con restrizioni le impedisce qualsiasi altra chiamata alle API.",[243,268,269,272],{},[22,270,271],{},"Leggi lo storico dei pagamenti"," del periodo in cui la chiave era esposta, e le email di Stripe per qualsiasi cosa che non hai fatto tu.",[10,274,275],{},"Se la chiave è già fuori e preferisci perdere qualche pagamento piuttosto che\nlasciarla attiva un’altra ora, fai il contrario. Rigenerare una chiave la blocca\nsubito e ne genera una nuova, e Stripe segnala che gli endpoint webhook creati\ncon la vecchia chiave restano attivi, quindi la tua gestione degli eventi\nsopravvive all’emergenza.",[214,277],{"alt":278,"caption":279,"src":280},"Tre pannelli numerati da sinistra a destra. Nel primo una finestra di app è collegata a una sola targhetta di chiave. Nel secondo è comparsa una seconda targhetta, l’app ora è collegata a quella, e la prima è disegnata sbiadita e senza linea. Nel terzo la prima targhetta è barrata e sparita, e l’app resta collegata solo alla targhetta nuova.","La sovrapposizione nel pannello centrale è tutto il punto. Le due chiavi sono attive insieme, ed è questo che permette lo scambio senza un buco nel tuo checkout.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Frolling-the-key-1600x620.png",[10,282,283],{},"C’è ancora un passaggio, ed è quello che quasi tutti fanno per primo:\ncancellare la chiave dal codice. Fallo, e sii chiaro su cosa ottiene. I tuoi\nvisitatori hanno già scaricato il file che la portava, quel file sta in cache di\nbrowser che non controlli, e il vecchio valore è ancora nel tuo storico delle\nversioni. Far scadere la chiave su Stripe è ciò che chiude la porta. Togliere la\nriga è ciò che ti impedisce di spedirla di nuovo.",[10,285,286],{},"Le chiavi pubblicabili, per inciso, non si possono far scadere affatto. Stripe\nnon ha mai costruito quel controllo, perché quella chiave non doveva mai essere\nprivata.",[43,288,290],{"id":289},"cosè-una-chiave-con-restrizioni-di-stripe-e-quando-è-la-risposta-giusta","Cos’è una chiave con restrizioni di Stripe, e quando è la risposta giusta",[10,292,293],{},"Una chiave tagliata su misura per un lavoro invece che per tutti.",[10,295,296,297,300],{},"Una chiave con restrizioni inizia con ",[14,298,299],{},"rk_live_"," e porta soltanto i permessi che\nspunti quando la crei. Una chiave che può leggere le fatture non può emettere un\nrimborso. Una chiave che può creare addebiti non può leggere il tuo elenco\nclienti. Stripe consiglia di passare dalle chiavi segrete a quelle con\nrestrizioni esattamente per questo, ed è un buon consiglio sul codice che gira\nsul tuo server.",[10,302,303],{},"Non è un modo per rendere accettabile una chiave nel browser. Due delle 30.998\napp della nostra scansione spedivano una chiave con restrizioni nel frontend, ed\nentrambe sono uscite con voto C. La nostra scansione tratta una chiave con\nrestrizioni come rilievo alto dove una segreta è critica, e un singolo rilievo\nalto mette un tetto al voto a C. Chi trova quella chiave ottiene comunque ogni\npermesso che hai spuntato, da qualunque posto.",[10,305,306],{},"Dove una chiave con restrizioni si guadagna il suo posto è il caso intermedio\nscomodo, e le app fatte con l’IA ne producono parecchi. Uno strumento di\nautomazione che deve leggere i tuoi bonifici. Uno script di report che qualcuno\nti ha scritto su Fiverr. Una Edge Function che crea sempre e solo un tipo di\naddebito. Ognuno di questi gira su un server e ognuno ha bisogno di una frazione\ndel tuo account, quindi ognuno prende la sua chiave con quella frazione\nspuntata, e il giorno in cui una trapela revochi una chiave invece di ricablare\ntutta la tua integrazione.",[43,308,310],{"id":309},"come-controllare-cosa-sta-spedendo-davvero-la-tua-app","Come controllare cosa sta spedendo davvero la tua app",[10,312,313,314,316,317,316,319,321],{},"Parti a mano, perché non costa niente e non richiede niente di installato. Apri\nil tuo sito in produzione, guarda il sorgente della pagina e cercaci dentro\n",[14,315,16],{},", poi ",[14,318,299],{},[14,320,28],{},". Trovare la terza e non le prime due\nè il risultato che vuoi.",[10,323,324,325,327,328,330],{},"Quello che una ricerca nel sorgente si perde è il JavaScript che la pagina carica\ndopo, e su un’app costruita con Lovable, Bolt o Replit è quasi tutto. Il nostro\nscanner gratuito apre la tua app in un browser vero, aspetta che arrivino i\nbundle e legge quelli. Classifica quello che trova invece di cercare stringhe a\nforma di chiave, così ",[14,326,28],{}," torna segnata come corretta e ",[14,329,16],{}," torna\ncome rilievo critico, e le due non finiscono mai nello stesso mucchio.",[214,332],{"alt":333,"caption":334,"src":335},"Il marchio Reeve sopra una griglia di nove icone a contorno, una per controllo: una chiave, un cilindro di database, un documento, un lucchetto, una scatola con coperchio, una coppia di parentesi di codice, un globo, una rosetta da certificato e un calendario.","Le chiavi sono uno dei nove controlli in sola lettura. Gli altri sono il motivo per cui un voto ti dice più di una ricerca nel tuo sorgente.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fnine-checks-1600x420.png",[10,337,338],{},"Voto, punteggio e conteggi compaiono sullo schermo in una ventina di secondi,\nsenza account. Se lasci un indirizzo email arriva anche l’elenco dettagliato,\ninsieme a una correzione scritta per il builder che hai usato e che puoi\nincollare così com’è.",[10,340,341,342,345,346,350,351,41],{},"Tre cose che la scansione non farà, e sono i motivi per cui la puoi puntare\nsenza timore su un’app in produzione che incassa davvero: non fa mai il login,\nnon scrive mai niente, e non conserva mai una chiave che trova. Un segreto\nesposto viene salvato come suggerimento mascherato nella forma ",[14,343,344],{},"sk_live_…a1b2",",\ne il valore vero viene buttato via.\n",[37,347,349],{"href":348},"\u002F#scan","Scansiona la tua app",", oppure leggi prima\n",[37,352,354],{"href":353},"\u002Fsecurity-scanner","cosa guarda ognuno dei nove controlli",[43,356,358],{"id":357},"cosa-fare-adesso","Cosa fare adesso",[360,361,362],"key-takeaways",{},[363,364,365,377,380,383,386,389],"ul",{},[243,366,367,368,370,371,373,374,376],{},"Leggi il secondo carattere prima di ogni altra cosa. ",[14,369,28],{}," nel tuo bundle è corretta e non chiede niente; ",[14,372,16],{}," e ",[14,375,299],{}," sì.",[243,378,379],{},"Crea prima la chiave sostitutiva e conferma un pagamento reale con quella, poi fai scadere la vecchia su Stripe. È la scadenza che chiude la porta.",[243,381,382],{},"Cancellare la chiave dal codice non chiude niente da solo. Il file che la portava è già scaricato, in cache e nel tuo storico delle versioni.",[243,384,385],{},"Sposta su un server tutto quello che aveva bisogno di quella chiave: una Edge Function, una route serverless, qualunque cosa che non sia il browser.",[243,387,388],{},"Leggi lo storico dei pagamenti e l’elenco clienti del periodo in cui la chiave era attiva. La rigenerazione ferma quello che succede da adesso e non dice niente su quello che è già successo.",[243,390,391],{},"Dai a ogni lavoro lato server la sua chiave con restrizioni e i soli permessi che gli servono, così la prossima fuga ti costa una chiave e non tutte.",[10,393,394],{},"Una chiave Stripe di solito arriva tardi. L’app esce, gira per un po’, e poi un\ngiorno aggiungi il checkout, ed è quel deploy a mettere per la prima volta una\ncredenziale di incasso nel bundle. La scansione che hai fatto al lancio era la\nfotografia di un’app che ancora non poteva prendere soldi.",[10,396,397,401],{},[37,398,400],{"href":399},"\u002Fpricing","Reeve Monitor"," è fatto per quel vuoto. Ripassa tutti e nove i\ncontrolli ogni ora su un massimo di tre app, sorveglia la raggiungibilità ogni\n60 secondi, ti avvisa il giorno in cui un risultato cambia invece di aspettare\nche tu guardi, e manda un report mensile in parole semplici. Una chiave che\narriva nel bundle con un deploy di giovedì finisce nella scansione di quell’ora.\nCosta €12 al mese di listino, con sette giorni gratis prima di addebitarti\nqualcosa, e la pagina dei prezzi a volte sta sotto la cifra qui e mai sopra.",[10,403,404,405,409,410,414,415,419,420,41],{},"Se preferisci procedere per lista, la\n",[37,406,408],{"href":407},"\u002Fchecklist","checklist di sicurezza in 10 minuti"," copre questo insieme alle\naltre cose che vale la pena chiudere in un’app appena lanciata. Per la domanda\npiù ampia su quali chiavi abbiano senso in un browser, abbiamo\n",[37,411,413],{"href":412},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","una guida per distinguere le chiavi pubblicabili da quelle segrete",",\n",[37,416,418],{"href":417},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","la stessa domanda per una chiave OpenAI",",\ne ",[37,421,423],{"href":422},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","un censimento di cosa spedivano davvero 30.998 app",{"title":425,"searchDepth":426,"depth":426,"links":427},"",3,[428,430,431,432,433,434,435],{"id":45,"depth":429,"text":46},2,{"id":73,"depth":429,"text":74},{"id":205,"depth":429,"text":206},{"id":234,"depth":429,"text":235},{"id":289,"depth":429,"text":290},{"id":309,"depth":429,"text":310},{"id":357,"depth":429,"text":358},"Basi della sicurezza","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcover-1200x630.png","Un registratore di cassa da negozio con il cassetto dei contanti aperto e una chiave lasciata nella serratura sul davanti della macchina.","Una chiave segreta Stripe esposta nel tuo frontend può rimborsare, addebitare e leggere ogni scheda cliente che hai. La tua chiave pk_live_ ci sta bene.",false,"md",[443,446,449,452,455,458],{"q":444,"a":445},"La mia chiave pubblicabile Stripe è sicura nel frontend?","Sì. Una chiave che inizia con pk_live_ deve stare nella pagina, e Stripe lo dice nella sua documentazione: le chiavi pubblicabili si possono esporre senza problemi nel codice frontend. Costruisce il modulo di pagamento e tokenizza una carta. Non può leggere i tuoi clienti, muovere denaro o rimborsare nulla. Se uno scanner o un conoscente ti ha detto che hai una chiave Stripe esposta, leggi il secondo carattere prima di fare qualsiasi altra cosa, perché una chiave pk_live_ dentro il tuo bundle è la tua integrazione che funziona esattamente come Stripe l’ha progettata.",{"q":447,"a":448},"Cosa può fare qualcuno con una chiave segreta Stripe trapelata?","Tutto quello che puoi fare tu nella tua dashboard e che non richieda la password. Può leggere l’elenco completo dei tuoi clienti con nomi, indirizzi email, indirizzi di fatturazione e le ultime quattro cifre di ogni carta, leggere ogni pagamento che hai mai incassato, emettere rimborsi finché il tuo saldo non è vuoto, creare addebiti e link di pagamento, e far passare numeri di carta rubati attraverso il tuo account per trovare quelli ancora validi. Quest’ultima cosa Stripe la chiama card testing, e a te arriva come contestazioni e rifiuti su un account che credevi tranquillo.",{"q":450,"a":451},"Come rigenero una chiave Stripe senza interrompere i pagamenti?","Crea prima la sostituta. Nella dashboard di Stripe crea una nuova chiave segreta, mettila dove viveva la vecchia sul tuo server, fai il deploy e conferma un pagamento reale con la chiave nuova. Solo a quel punto fai scadere la vecchia, cosa che le impedisce qualsiasi altra chiamata alle API. Se la chiave è già pubblica e preferisci perdere qualche pagamento piuttosto che lasciarla attiva, rigenerala subito: la rigenerazione blocca la chiave immediatamente e ne genera una nuova, e Stripe segnala che gli endpoint webhook creati con la vecchia chiave restano attivi.",{"q":453,"a":454},"Cos’è una chiave con restrizioni di Stripe?","Una chiave tagliata su misura per un solo lavoro. Una chiave con restrizioni inizia con rk_live_ e porta soltanto i permessi che spunti quando la crei, quindi una chiave che può leggere le fatture non può emettere un rimborso. Stripe consiglia di passare dalle chiavi segrete a quelle con restrizioni proprio per questo. Leggilo come un consiglio sul codice che gira sul tuo server, non come un modo per rendere accettabile una chiave lato browser: una chiave con restrizioni dentro il tuo bundle resta una credenziale che uno sconosciuto può usare, e la nostra scansione la classifica come rilievo alto.",{"q":456,"a":457},"Stripe mi avvisa se la mia chiave trapela?","A volte, e non puoi contarci. Stripe dice di scandagliare attivamente internet alla ricerca di chiavi API trapelate, con strumenti come lo scanner di token di GitHub, e che può avvisarti o disattivare una chiave che trova. La sua stessa pagina di buone pratiche aggiunge che il rilevamento non è garantito. Quella ricerca funziona soprattutto sui repository di codice pubblici, e una chiave compilata dentro il JavaScript del tuo dominio non è un repository. Tratta come compromessa qualsiasi chiave che hai visto dove non doveva stare, che Stripe abbia detto qualcosa o no.",{"q":459,"a":460},"Una chiave di test (sk_test_) è pericolosa nel mio frontend?","È un problema molto più piccolo di una chiave attiva e vale comunque la pena chiuderlo. Una chiave di test tocca solo il tuo ambiente di prova, quindi nessuno può prendersi i tuoi soldi con quella. Quello che consegna, però, è una mappa funzionante di come è montata la tua integrazione, e di solito significa che la stessa abitudine del copia e incolla è a un deploy di distanza dallo spedire la chiave attiva. Stripe tratta come compromessa qualsiasi chiave segreta o con restrizioni vista dove non doveva stare. Falla scadere e sposta la chiamata su un server.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",[463,464,465,466,467,468,469],"chiave segreta stripe esposta","chiave sk_live nel frontend","chiave stripe trapelata cosa fare","chiave con restrizioni stripe","la mia chiave pubblicabile stripe è sicura","rigenerare chiave api stripe","chiave stripe nel bundle javascript",{},true,"Chiave segreta Stripe esposta nel tuo frontend?","\u002Fblog\u002Fstripe-secret-key-in-frontend","2026-09-19",{"title":5,"description":439},"blog\u002Fstripe-secret-key-in-frontend",[478,479,480,481],"Una chiave segreta Stripe esposta nel tuo frontend è la fuga che viene addebitata al tuo conto: rimborsi, nuovi addebiti e ogni scheda cliente che hai.","pk_live_ sta nella tua app ed è sempre stato così. sk_live_ ne differisce per un solo carattere e ha permessi senza limiti su tutto il tuo account Stripe.","Crea prima la chiave sostitutiva, mettila in produzione e solo dopo fai scadere la vecchia. Cancellare la riga dal codice non richiama indietro nulla che sia già stato scaricato.","Abbiamo trovato una chiave segreta Stripe attiva in 3 app su 30.998 scansionate. Tutte e tre sono uscite con voto D.","s3-JDxyxEgRLf2QmrZzM_tATQ7sxqswcnqkyogJzNrg",[484,491,497,503,509,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,605,610,616,622,628,634,640,646,652,658,664,670,676,682,688,693,699,705,711,716,722],{"path":485,"title":486,"description":487,"published":488,"category":489,"image":490,"draft":440},"\u002Fblog\u002Fsupabase-backup-auth-users","Perché nel tuo dump Supabase non ci sono utenti","Lancia supabase db dump da solo e ottieni la forma del tuo database e nessuna delle sue righe, senza lo schema auth in cui vivono i tuoi utenti.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":492,"title":493,"description":494,"published":495,"category":436,"image":496,"draft":440},"\u002Fblog\u002Fdomain-and-certificate-expiry","Dominio scaduto, sito offline: cosa succede adesso","Il tuo dominio è scaduto e il sito è offline. Il conto alla rovescia che parte, perché il certificato è il problema minore, e come controllarli entrambi.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":498,"title":499,"description":500,"published":501,"category":436,"image":502,"draft":440},"\u002Fblog\u002Fis-lovable-safe","Lovable è sicuro? Cosa abbiamo trovato in 18.554 app Lovable","Lovable è sicuro? Abbiamo passato 18.554 app Lovable online per nove controlli. La piattaforma è risultata la più pulita di cinque. I rilievi stavano nelle app.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":504,"title":505,"description":506,"published":507,"category":436,"image":508,"draft":440},"\u002Fblog\u002Fvibe-coded-app-security-checklist","La checklist di sicurezza del vibe coding, in nove controlli","Una checklist di sicurezza del vibe coding in nove voci, ognuna verificabile dall’esterno sulla tua app dal vivo, e ognuna con un test di una riga.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":473,"title":5,"description":439,"published":474,"category":436,"image":461,"draft":440},{"path":511,"title":512,"description":513,"published":514,"category":436,"image":515,"draft":440},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variabili d’ambiente Vite esposte: il prefisso vuol dire pubblica","Variabili d’ambiente Vite esposte: la tua app ha fatto ciò che il prefisso chiedeva. VITE_ e NEXT_PUBLIC_ vogliono dire pubblica, e l’IA non sapeva il costo.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":517,"title":518,"description":519,"published":520,"category":436,"image":521,"draft":440},"\u002Fblog\u002Fbase44-source-maps","Sicurezza Base44: cosa segnala uno scan e cosa tocca a te sistemare","Sicurezza Base44 su 5.438 app scansionate: tre segnalazioni su quasi tutte sono della piattaforma, la source map è il badge di Base44, la tua parte è corta.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":523,"title":524,"description":525,"published":526,"category":436,"image":527,"draft":440},"\u002Fblog\u002Fis-cursor-ai-safe","Cursor AI è sicuro? L’editor, il codice e l’app che hai pubblicato","Cursor AI è sicuro? Tre domande in una ricerca: cosa tiene Cursor, cosa sbaglia il codice che scrive, e se l’app che hai pubblicato è aperta.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":529,"title":530,"description":531,"published":532,"category":436,"image":533,"draft":440},"\u002Fblog\u002Fis-replit-safe","Replit è sicuro? Cosa abbiamo trovato in 3.042 app Replit online","Replit è sicuro? Abbiamo passato 3.042 app Replit online per nove controlli esterni. I rilievi stavano nell’app pubblicata, non nell’host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":535,"title":536,"description":537,"published":538,"category":489,"image":539,"draft":440},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: la copia del database non ha nessun file","Un Supabase storage backup è un lavoro a parte. I backup del database tengono la lista dei tuoi file e nessuno dei file, quindi ogni upload resta rotto.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":541,"title":542,"description":543,"published":544,"category":489,"image":545,"draft":440},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery di Supabase: prezzo e limiti","Il point-in-time recovery di Supabase riavvolge il database a qualsiasi secondo della settimana scorsa. $100 al mese oltre a Pro, e copre solo il database.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":547,"title":548,"description":549,"published":550,"category":489,"image":551,"draft":440},"\u002Fblog\u002Fsupabase-project-paused-recover","Progetto Supabase in pausa? I tuoi dati sono ancora lì","Supabase ha messo in pausa il tuo progetto dopo una settimana senza attività. Non è cancellato niente, Ripristina è accanto al nome e hai un anno di tempo.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":553,"title":554,"description":555,"published":556,"category":436,"image":557,"draft":440},"\u002Fblog\u002Fsafest-ai-app-builder","Qual è il builder di app con IA più sicuro? 30.998 app testate","Qual è il builder di app con IA più sicuro? Abbiamo scansionato 30.998 app online di Lovable, Base44, Replit, v0 e Bolt. Non è il builder a decidere il voto.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":559,"title":560,"description":561,"published":562,"category":436,"image":563,"draft":440},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Attiva Row Level Security su ogni tabella Supabase, poi verificalo","Attivare Row Level Security su Supabase senza una policy chiude del tutto la tabella. Una policy senza il flag non fa nulla. Ecco lo SQL, e la verifica.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":565,"title":566,"description":567,"published":568,"category":436,"image":569,"draft":440},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": cosa non vede l'avviso","Supabase segnala \"RLS disabled in public\" come errore. Non dice nulla della policy di lettura che lascia la tua tabella altrettanto aperta.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":571,"title":572,"description":573,"published":574,"category":436,"image":575,"draft":440},"\u002Fblog\u002Frotate-supabase-service-role-key","Come ruotare una chiave service_role Supabase trapelata","Supabase dice di chiudere prima la falla. Altre guide dicono di ruotare subito. Quale sia giusto dipende da dove è finita la tua chiave service_role.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":577,"title":578,"description":579,"published":580,"category":436,"image":581,"draft":440},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanner di sicurezza per vibe coding a confronto, il nostro incluso","Il miglior scanner di sicurezza per vibe coding dipende da tre domande che nessun elenco di funzioni affronta. Dieci strumenti a confronto, con i prezzi.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":583,"title":584,"description":585,"published":586,"category":436,"image":587,"draft":440},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: i cinque controlli da fare da soli","Un Supabase security checker legge la tua app pubblicata invece delle impostazioni del progetto. Ecco i cinque controlli che esegue e come farli da solo.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":589,"title":590,"description":591,"published":592,"category":436,"image":593,"draft":440},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner di sicurezza per vibe coding: cosa si perde","Uno scanner di sicurezza per vibe coding legge la tua app dal vivo, da fuori. Cosa copre, le quattro cose che non può vedere e come leggere il risultato.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":595,"title":596,"description":597,"published":598,"category":436,"image":599,"draft":440},"\u002Fblog\u002Fmissing-security-headers","Intestazioni di sicurezza mancanti: quando contano","Le intestazioni di sicurezza mancanti sono il rilievo che il nostro scanner stampa più spesso. Da cosa proteggono e quando sono la riga meno urgente.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":417,"title":601,"description":602,"published":603,"category":436,"image":604,"draft":440},"La tua chiave API OpenAI è esposta nel frontend. Ruotala.","Una chiave API OpenAI esposta nel frontend non si può legare a nessun dominio. Ruotala oggi, sposta la chiamata sul tuo server e metti un tetto di spesa.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":422,"title":606,"description":607,"published":608,"category":436,"image":609,"draft":440},"Chiave API esposta nel frontend: cosa spediscono 30.998 app","Una chiave API esposta nel tuo frontend è quasi sempre una chiave di Google Maps. Abbiamo scansionato 30.998 app vibe-coded e contato cosa esce davvero.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":611,"title":612,"description":613,"published":614,"category":489,"image":615,"draft":440},"\u002Fblog\u002Fsupabase-backup-tools-compared","Strumenti di backup Supabase a confronto, il nostro incluso","Quattro tipi di strumento di backup Supabase, cosa copia davvero ognuno, e il caso in cui una GitHub Action gratuita batte il pagare chiunque, noi inclusi.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":617,"title":618,"description":619,"published":620,"category":436,"image":621,"draft":440},"\u002Fblog\u002Freplit-secrets-explained","Come usare i secret su Replit, e cosa viene comunque pubblicato","Come usare i secret su Replit: aggiungerne uno, rileggerlo e risolvere le due cause dell'undefined. E le chiavi che lo strumento non riesce a proteggere.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":623,"title":624,"description":625,"published":626,"category":489,"image":627,"draft":440},"\u002Fblog\u002Fback-up-supabase-free-tier","Backup del piano gratuito Supabase: farne uno senza terminale","Sul piano gratuito Supabase non esistono backup: la copia la fai tu. Come farne uno dalla dashboard e che cosa si lascia dietro la via del CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":629,"title":630,"description":631,"published":632,"category":436,"image":633,"draft":440},"\u002Fblog\u002Fis-supabase-secure","Supabase è sicuro? Sì. Il tuo progetto è un'altra questione","Supabase è sicuro? La piattaforma è certificata, cifrata e sottoposta a pentest. La loro documentazione dice dove finisce quello e iniziano le tue impostazioni.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":635,"title":636,"description":637,"published":638,"category":436,"image":639,"draft":440},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Dove trovare le chiavi API di Supabase: anon, service_role e URL","L'URL del progetto, la chiave anon e la chiave service_role stanno su una pagina della dashboard. Ecco dove si trova e quale dei quattro va nella tua app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":641,"title":642,"description":643,"published":644,"category":436,"image":645,"draft":440},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy su Supabase. E adesso?","\"New row violates row-level security policy\" significa che Supabase ha rifiutato una scrittura. La soluzione veloce riapre la tabella a chiunque.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":647,"title":648,"description":649,"published":650,"category":436,"image":651,"draft":440},"\u002Fblog\u002Fcors-wildcard-security-risk","Un wildcard CORS è un rischio di sicurezza? Quasi mai.","Un wildcard CORS è un rischio di sicurezza? Di solito è il valore predefinito del tuo builder e non consegna nulla che il tuo server non desse già a chiunque.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":653,"title":654,"description":655,"published":656,"category":489,"image":657,"draft":440},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Il branching di Supabase non è un backup. Va solo in avanti.","Perché il branching di Supabase non è un backup: un branch parte senza i tuoi dati e un merge sposta solo lo schema. A cosa serve davvero e cosa usare invece.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":659,"title":660,"description":661,"published":662,"category":489,"image":663,"draft":440},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Come ripristinare un backup Supabase, e cosa si rompe dopo","Come ripristinare un backup Supabase dalla dashboard o da un file di dump, che cosa sostituisce il ripristino e perché la tua app può restare rotta lo stesso.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":665,"title":666,"description":667,"published":668,"category":436,"image":669,"draft":440},"\u002Fblog\u002Fsupabase-storage-bucket-public","Il tuo bucket Supabase Storage è pubblico. È un problema?","Un bucket Supabase Storage pubblico significa che chi ha l'URL di un file può aprirlo. Non significa che qualcuno possa elencare quello che c'è dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":671,"title":672,"description":673,"published":674,"category":436,"image":675,"draft":440},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Una chiave API Google nel frontend è un problema?","Una chiave API Google esposta nel frontend è la chiave che il nostro scanner trova più spesso, e di solito va bene così. Lo decide una impostazione gratuita.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":677,"title":678,"description":679,"published":680,"category":489,"image":681,"draft":440},"\u002Fblog\u002Fai-agent-deleted-my-database","Un agente IA ha cancellato i miei dati Supabase. Cosa recupero?","Un agente IA ha cancellato dati dal tuo database. Quello che puoi recuperare era già deciso prima che partisse, e i prossimi minuti decidono il resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":683,"title":684,"description":685,"published":686,"category":436,"image":687,"draft":440},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Chiunque può leggere il tuo database Supabase? 3.680 app testate","Chiunque può leggere il tuo database Supabase senza fare login? Abbiamo scansionato 30.998 app online create con i builder IA e misurato quante rispondono sì.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":689,"title":690,"description":691,"published":686,"category":436,"image":692,"draft":440},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source map esposte: la tua app sta pubblicando il codice originale","Una source map esposta permette a chiunque di leggere il codice originale della tua app, commenti inclusi. Il controllo da 30 secondi e cosa conta davvero.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":694,"title":695,"description":696,"published":697,"category":436,"image":698,"draft":440},"\u002Fblog\u002Fsupabase-new-api-keys","Le nuove chiavi API di Supabase: quale va nella tua app?","Supabase ha sostituito anon e service_role con chiavi pubblicabili e segrete. Quale sta bene nella tua app, e quale non deve starci mai?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":700,"title":701,"description":702,"published":703,"category":489,"image":704,"draft":440},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Supabase fa il backup del mio database? Dipende dal tuo piano.","Supabase fa il backup del tuo database? Ogni giorno sui piani a pagamento, mai su quello gratuito. Come capire cosa hai e cosa quella copia non copre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":706,"title":707,"description":708,"published":709,"category":436,"image":710,"draft":440},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security è attivo. La tabella resta pubblica.","Attivare Supabase Row Level Security non protegge una tabella. Lo fanno le policy, e quella che ha rimesso in piedi la tua app può far entrare chiunque.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":712,"title":713,"description":714,"published":709,"category":489,"image":715,"draft":440},"\u002Fblog\u002Fversion-history-is-not-a-backup","La cronologia delle versioni non è un backup dei tuoi dati.","Lovable e Bolt tengono una cronologia delle versioni del codice. Il tuo database è un servizio a parte, e tornare indietro non ti restituisce i dati.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":717,"title":718,"description":719,"published":720,"category":489,"image":721,"draft":440},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Tre modi per fare il backup di un database Supabase, e cosa manca","Il pannello, pg_dump e un servizio gestito. Che cosa salva davvero ciascuno, cosa lascia fuori senza dirlo e quale sopravvive alla perdita dell'account.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":412,"title":723,"description":724,"published":720,"category":436,"image":725,"draft":440},"Quali chiavi API sono sicure nel browser e quali no","La tua chiave anon di Supabase è fatta per essere pubblica. La chiave service_role no, e ignora ogni regola che imposti. Come distinguerle.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150956024]