// docs / security guides / cursor checklist
Cursor security checklist: 25 items before ship
Building with Cursor? Cursor's autocomplete and Agent features are exceptionally powerful — and create predictable security blind spots. This checklist targets Cursor-specific patterns: service-role key inlining, generated multi-file edits merged without review, Agent-mode terminal commands, and project rules (.cursor/rules) as your first security guardrail. 25 items across secrets, database, auth, headers, deployment, and Cursor-specific gotchas.
PRE = pre-deploy (audit your source). DEPLOY = at deploy time. POST = post-deploy verification.
Segreti e chiavi API (5 articoli)
Il completamento automatico di Cursor è addestrato su codice open source in cui i segreti sono comuni. Il modello li suggerisce liberamente, soprattutto dopo un tentativo di autenticazione fallito.
- PRE — Write security rules into your project rules. Add a rule in
.cursor/rules(Cursor docs): "Never inlineSUPABASE_SERVICE_ROLE_KEY,sk_live_*, or any server secret into client-side code. Always use server-only imports." Cursor applies project rules as context for Agent and chat. - PRE — Audit Composer-generated files. Quando il compositore di Cursor crea un intero file (in particolare i gestori di autenticazione), rivedilo riga per riga. Il compositore a volte incorpora variabili env che dovrebbero rimanere solo sul server. Cerca
NEXT_PUBLIC_o riferimenti diretti alle chiavi di servizio nelle importazioni di componenti. - PRE — Reject auto-imports of service clients into client components. Se Composer importa
import { supabase } from '@/lib/supabase/service'in un file React, eliminalo immediatamente e instradalo invece attraverso un endpoint API. Le importazioni solo server sono contrassegnate esplicitamente: non saltarle. - PRE — Scan Agent-mode commits. La modalità agente esegue comandi del terminale e può eseguire il commit direttamente. Controlla
git log --oneline -20egit diff HEAD~5per garantire che non siano state eseguite stringhe dall'aspetto segreto durante l'esecuzione dell'agente. - POST — Run Secrets in JavaScript Bundles. Scansione passiva sul URL distribuito. Se una chiave di servizio appare nel bundle JS, ruotala immediatamente: probabilmente il completamento automatico di Cursor l'ha incorporata.
Controllo dell'accesso al database (4 articoli)
Composer spesso genera un codice di autenticazione funzionante ma salta RLS: il momento "funziona" impedisce alle persone di vedere la mancata applicazione delle policy.
- PRE — Make Cursor generate migrations with RLS. In your project rules: "Every
CREATE TABLE public.*migration must includeALTER TABLE ... ENABLE ROW LEVEL SECURITYand a policy per command scoped toauth.uid()." Then ask Cursor to generate the migration. - PRE — Review Composer-generated policies. Il compositore a volte scrive le policy senza controllare
auth.uid(). Politiche comeallow select on public.itemssenza una clausolausingsono pericolosamente ampie. Richiede la corrispondenza user_id. - DEPLOY — Confirm RLS and policies are live. Open Supabase Studio and check that every table's RLS toggle is on and that each table has policies. A table with RLS on and no policies denies everything; one with
USING (true)allows everyone. - POST — Run a FixVibe scan on the deployed app. Check the Supabase Row-Level Security result: it shows any table an anonymous visitor can read with your public key.
Autenticazione e sessioni (4 articoli)
Cursor genera rapidamente flussi di autenticazione ma spesso manca la sottile convalida lato server che mantiene i token al sicuro.
- PRE — Ensure all auth routes use
getUser(). CercagetSession()nei tuoi percorsi API e sostituisci conawait supabase.auth.getUser().getSession()legge un cookie non verificato;getUser()convalida con il backend Supabase. - PRE — Check Composer auth handlers for token expiry. I token Magic-link richiedono l'applicazione del server
expires_at. Il valore predefinito Supabase è 1 ora: non chiedere a Cursor di sovrascriverlo senza un motivo reale. - PRE — Audit the sign-in redirect guard. Il reindirizzamento del parametro di query
nextdopo l'accesso deve essere convalidato: deve iniziare con/, mai//. Il compositore a volte lo salta. Aggiungilo manualmente se mancante. - POST — Test logout server-side state destruction. Accedi, esci, controlla i cookie (DevTools → Applicazione → Cookie). Il cookie di sessione deve essere cancellato immediatamente. Se persiste, il gestore del logout non sta distruggendo lo stato.
HTTP intestazioni di sicurezza e CSP (3 elementi)
Cursor raramente genera middleware per impostazione predefinita. Se non lo chiedi esplicitamente, CSP e HSTS di solito non ci sono.
- PRE — Demand CSP in your project rules. Add: "Generate a
src/middleware.tswith Content-Security-Policy. Use nonce for script-src, no unsafe-inline." Then ask Cursor to generate it. Without this hint, middleware is skipped. - PRE — Verify
src/middleware.tsexists. Con il layout della directorysrc/, Next.js rileva solosrc/middleware.ts. Unmiddleware.tsa livello root viene silenziosamente ignorato. Se CSP non viene visualizzato, controlla che il file sia nel posto giusto. - POST — Run HTTP Security Headers. Rapporti di scansione passiva mancanti CSP, HSTS, X-Frame-Options, X-Content-Type-Options. Apri il report e segui le indicazioni per la correzione per la tua piattaforma di distribuzione.
Igiene della distribuzione (5 articoli)
Le app Cursor spesso arrivano a Vercel, che ha buone impostazioni predefinite ma necessita di un rafforzamento esplicito per il limite build/deploy.
- DEPLOY — Check Vercel env-var scoping. Impostazioni → Variabili d'ambiente → ciascun segreto deve avere come ambito solo Production. Non condividere mai
sk_live_*con Anteprima o Sviluppo. - DEPLOY — Disable build-log secret echo. Se il tuo flusso di lavoro
vercel.jsono GitHub Actions haecho $SECRET, rimuovilo. I log di build vengono archiviati pubblicamente; i segreti nei log sono compromessi. - DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Impostazioni di Vercel → Variabili d'ambiente sono crittografate quando sono inattive. GitHub I segreti delle azioni sono meglio di niente ma sono progettati per CI, non per l'integrazione della piattaforma di distribuzione.
- POST — Verify CSP nonce on the deployed preview. Apri un collegamento Vercel Anteprima nel browser, apri DevTools → Rete → la risposta root HTML. L'intestazione CSP deve essere presente e includere
'strict-dynamic'con un nonce univoco per richiesta. - POST — Rotate any key that ever shipped, even to Preview. Se una chiave raggiunge il bundle di produzione anche per 10 minuti, è compromessa. Gira subito.
Cursor trucchi specifici (4 articoli)
Modelli esclusivi del flusso di lavoro di Cursor che creano rischi per la sicurezza:
- Agent mode auto-fixes propagate old patterns. Se chiedi all'agente di "correggere gli errori di autenticazione", potrebbe rigenerare lo stesso file di autenticazione più volte, ogni volta incorporando la stessa chiave di servizio se si trova nel contesto codebase. Pulisci prima l'originale, poi chiedi all'agente di ripararlo.
- Cursor Index leaks intent. Cursor L'indicizzazione di
@codebaseè potente ma se la tua directory.cursorviene esposta (S3 configurato in modo errato, cronologia git), l'indice rivela la tua architettura e i tuoi modelli segreti. Mantieni.cursorlocale. - Composer mode loses context between files. Ogni file generato da Composer è aggiornato. Se gli chiedi di generare un file client, quindi un percorso API, potrebbero utilizzare diverse configurazioni client Supabase. Esaminali entrambi e assicurati che corrispondano alla tua architettura.
- Autocomplete bias toward "working" over "secure". Cursor suggerisce il codice più veloce che supera il contesto attuale. Se il tuo test ha
NEXT_PUBLIC_SERVICE_KEY, il completamento automatico lo ricorda e lo ripropone. Pulisci i dispositivi di prova prima di condividere il codice con il modello.
Prossimi passi
Una volta bloccati i modelli specifici di Cursor, effettuare un controllo incrociato con general vibe coding security checklist (51 elementi) e poi con step-by-step hardening. Vedi anche Claude Code checklist se stai mixando strumenti.
