API key esposte nel JavaScript lato client
Tutto ciò che arriva al browser — script inline, JS raggruppato, source map — può essere letto da chiunque. Le chiavi segrete (OpenAI, secret Stripe, AWS, URL di database) incorporate nel codice del frontend sono di fatto pubblicate.
Che cos'è
Gli strumenti di build inseriscono le variabili d'ambiente in fase di compilazione. Se fai riferimento a un secret nel codice client, finisce nel bundle JavaScript che ogni visitatore scarica.
C'è una distinzione cruciale: le chiavi publishable/anon (pk_live di Stripe, config web di Firebase) sono progettate per essere pubbliche, ma le chiavi segrete (sk_live, chiavi service role, API key dei provider) no e non devono mai arrivare al browser.
Perché è importante
Una chiave di provider trapelata permette a chiunque di far lievitare l'utilizzo sul tuo account — bollette per LLM, addebiti SMS, spese cloud — o di accedere ai dati che la chiave autorizza.
I malintenzionati analizzano i bundle JavaScript su vasta scala cercando pattern di chiavi. Un secret committato viene di solito sfruttato pochi minuti dopo la messa online.
Come risolverlo
Chiama le API di terze parti da una route server o dal backend, mai dal browser. Il browser parla con il tuo endpoint; il tuo endpoint custodisce la chiave.
// app/api/summarize/route.ts (server-only)
export async function POST(req: Request) {
const { text } = await req.json();
const r = await fetch("https://api.openai.com/v1/responses", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}` },
body: JSON.stringify({ model: "gpt-4o-mini", input: text }),
});
return Response.json(await r.json());
}In Next.js solo le variabili con prefisso NEXT_PUBLIC_ vengono esposte al browser. Non mettere mai un secret dietro quel prefisso: usalo solo per valori che è sicuro rendere pubblici.
Se un secret è arrivato al browser, revocalo e riemettilo. Rimuoverlo dalla build successiva non invalida le copie già raccolte.
FAQ
La mia chiave publishable Stripe (pk_live) è un problema nel frontend?
No: le chiavi publishable sono fatte per essere pubbliche. Il rischio è la chiave segreta (sk_live), che deve restare lato server.
Posso semplicemente offuscare la chiave?
No. L'offuscamento è banalmente reversibile. L'unica soluzione è tenere il secret completamente fuori dal client.
La tua app è interessata?
AppSafe controlla questo e decine di altri problemi in un'unica scansione gratuita.
Scansiona la mia app gratisGuide correlate
File .env esposti: come i malintenzionati trovano i tuoi secret
Un solo .env raggiungibile può consegnare l'intero stack.
Le source map in produzione fanno trapelare il tuo codice sorgente
I file .map distribuiti consegnano il tuo codice sorgente originale.
I flag dei cookie Secure, HttpOnly e SameSite
Tre flag che impediscono il furto dei cookie di sessione.