FixVibe

// 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.

Segredos e chaves API (5 itens)

O preenchimento automático de Cursor é treinado em código-fonte aberto, onde segredos são comuns. O modelo os sugere livremente, especialmente após uma tentativa de autenticação fracassada.

  1. PRE — Write security rules into your project rules. Add a rule in .cursor/rules (Cursor docs): "Never inline SUPABASE_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.
  2. PRE — Audit Composer-generated files. Quando o Composer de Cursor cria um arquivo inteiro (especialmente manipuladores de autenticação), revise-o linha por linha. O Composer às vezes incorpora env vars que devem permanecer apenas no servidor. Procure NEXT_PUBLIC_ ou referências diretas a chaves de serviço nas importações de componentes.
  3. PRE — Reject auto-imports of service clients into client components. Se o Composer importar import { supabase } from '@/lib/supabase/service' para um arquivo React, exclua-o imediatamente e roteie através de um endpoint API. As importações somente de servidor são explicitamente marcadas — não as ignore.
  4. PRE — Scan Agent-mode commits. O modo Agente executa comandos de terminal e pode confirmar diretamente. Audite git log --oneline -20 e git diff HEAD~5 para garantir que nenhuma string de aparência secreta tenha sido confirmada durante uma execução do Agente.
  5. POST — Run Secrets in JavaScript Bundles. Verificação passiva no URL implantado. Se uma chave de serviço aparecer no pacote JS, gire-a imediatamente - o preenchimento automático de Cursor provavelmente a incorporou.

Controle de acesso ao banco de dados (4 itens)

O Composer geralmente gera código de autenticação funcional, mas ignora RLS — o momento "funciona" cega as pessoas para a falta de aplicação da política.

  1. PRE — Make Cursor generate migrations with RLS. In your project rules: "Every CREATE TABLE public.* migration must include ALTER TABLE ... ENABLE ROW LEVEL SECURITY and a policy per command scoped to auth.uid()." Then ask Cursor to generate the migration.
  2. PRE — Review Composer-generated policies. O Composer às vezes escreve políticas sem verificar auth.uid(). Políticas como allow select on public.items sem uma cláusula using são perigosamente amplas. Exigir correspondência user_id.
  3. 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.
  4. 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.

Autenticação e sessões (4 itens)

Cursor gera fluxos de autenticação rapidamente, mas muitas vezes perde a validação sutil do lado do servidor que mantém os tokens seguros.

  1. PRE — Ensure all auth routes use getUser(). Pesquise getSession() em suas rotas API e substitua por await supabase.auth.getUser(). getSession() lê um cookie não verificado; getUser() valida com Supabase back-end.
  2. PRE — Check Composer auth handlers for token expiry. Os tokens Magic-link precisam ser aplicados pelo servidor expires_at. O padrão Supabase é 1 hora — não peça a Cursor para substituí-lo sem um motivo real.
  3. PRE — Audit the sign-in redirect guard. O redirecionamento do parâmetro de consulta next após o login deve ser validado: deve começar com /, nunca //. O compositor às vezes pula isso. Adicione-o manualmente se estiver faltando.
  4. POST — Test logout server-side state destruction. Faça login, saia, inspecione cookies (DevTools → Aplicativo → Cookies). O cookie da sessão deve ser apagado imediatamente. Se persistir, o manipulador de logout não está destruindo o estado.

HTTP cabeçalhos de segurança e CSP (3 itens)

Cursor raramente gera middleware por padrão. Se você não perguntar explicitamente, CSP e HSTS geralmente não estão lá.

  1. PRE — Demand CSP in your project rules. Add: "Generate a src/middleware.ts with Content-Security-Policy. Use nonce for script-src, no unsafe-inline." Then ask Cursor to generate it. Without this hint, middleware is skipped.
  2. PRE — Verify src/middleware.ts exists. Com o layout de diretório src/, Next.js seleciona apenas src/middleware.ts. Um middleware.ts de nível raiz é ignorado silenciosamente. Se CSP não estiver chegando, verifique se o arquivo está no lugar certo.
  3. POST — Run HTTP Security Headers. Relatórios de verificação passiva faltando CSP, HSTS, X-Frame-Options, X-Content-Type-Options. Abra o relatório e siga as orientações de correção para sua plataforma de implantação.

Higiene de implantação (5 itens)

Os aplicativos Cursor geralmente chegam a Vercel, que tem bons padrões, mas precisa de proteção explícita para o limite build/deploy.

  1. DEPLOY — Check Vercel env-var scoping. Configurações → Variáveis de ambiente → cada segredo deve ter como escopo apenas Production. Nunca compartilhe sk_live_* com visualização ou desenvolvimento.
  2. DEPLOY — Disable build-log secret echo. Se o seu fluxo de trabalho vercel.json ou GitHub Actions tiver echo $SECRET, remova-o. Os logs de compilação são arquivados publicamente; segredos nos logs são comprometidos.
  3. DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Vercel Configurações → Variáveis de ambiente são criptografadas em repouso. GitHub Os segredos das ações são melhores do que nada, mas são projetados para CI, não para integração de plataforma de implantação.
  4. POST — Verify CSP nonce on the deployed preview. Abra um link de visualização Vercel no navegador, abra DevTools → Rede → a resposta raiz HTML. O cabeçalho CSP deve estar presente e incluir 'strict-dynamic' com um nonce exclusivo por solicitação.
  5. POST — Rotate any key that ever shipped, even to Preview. Se uma chave chegar ao pacote de produção por até 10 minutos, ela estará comprometida. Gire imediatamente.

pegadinhas específicas de Cursor (4 itens)

Padrões exclusivos do fluxo de trabalho de Cursor que criam riscos de segurança:

  1. Agent mode auto-fixes propagate old patterns. Se você pedir ao Agente para "corrigir erros de autenticação", ele poderá regenerar o mesmo arquivo de autenticação várias vezes, sempre incorporando a mesma chave de serviço se estiver no contexto da base de código. Limpe o original primeiro e depois peça ao Agente para consertar.
  2. A indexação Cursor Index leaks intent. Cursor @codebase é poderosa, mas se o seu diretório .cursor for exposto (S3 mal configurado, histórico do git), o índice revela sua arquitetura e padrões secretos. Mantenha .cursor local.
  3. Composer mode loses context between files. Cada arquivo gerado pelo Composer é novo. Se você solicitar que ele gere um arquivo de cliente e, em seguida, uma rota API, eles poderão usar configurações de cliente Supabase diferentes. Revise ambos e certifique-se de que correspondam à sua arquitetura.
  4. Autocomplete bias toward "working" over "secure". Cursor sugere o código mais rápido que passa no seu contexto atual. Se o seu teste tiver NEXT_PUBLIC_SERVICE_KEY, o preenchimento automático lembra e sugere novamente. Limpe os acessórios de teste antes de compartilhar o código com o modelo.

Próximas etapas

Depois de bloquear os padrões específicos de Cursor, verifique com general vibe coding security checklist (51 itens) e depois com step-by-step hardening. Veja também Claude Code checklist se você estiver mixando ferramentas.

// escaneie seu app

Pare de ler. Comece a encontrar as falhas no seu.

Drop in a URL — FixVibe runs every passive check from this guide plus the rest of its 230+ passive checks, usually in under a minute. Free, no install, no card.

  • Free tier — 3 scans / mês, sem cartão.
  • Scans passivos contra qualquer URL — sem verificação de domínio.
  • Afinado para Cursor, Claude Code, Lovable, Bolt, v0, Replit.
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
Cursor security checklist: 25 items before ship · FixVibe