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.

Sırlar ve API tuşları (5 öğe)

Cursor'nin otomatik tamamlama özelliği, sırların yaygın olduğu açık kaynak kod üzerinde eğitilmiştir. Model, özellikle başarısız bir kimlik doğrulama girişiminden sonra bunları serbestçe önerir.

  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. Cursor'in Bestecisi bir dosyanın tamamını oluşturduğunda (özellikle kimlik doğrulama işleyicileri), onu satır satır inceleyin. Besteci bazen yalnızca sunucuda kalması gereken satır içi env değişkenlerini kullanır. Bileşen içe aktarma işleminde NEXT_PUBLIC_'yi veya hizmet anahtarlarına doğrudan referansları arayın.
  3. PRE — Reject auto-imports of service clients into client components. Composer import { supabase } from '@/lib/supabase/service''yi bir React dosyasına aktarırsa, onu hemen silin ve bunun yerine bir API uç noktası üzerinden yönlendirin. Yalnızca sunucuya yönelik içe aktarma işlemleri açıkça işaretlenmiştir; bunları atlamayın.
  4. PRE — Scan Agent-mode commits. Aracı modu, terminal komutlarını çalıştırır ve doğrudan işlem yapabilir. Bir Agent çalıştırması sırasında gizli görünen dizelerin işlenmediğinden emin olmak için git log --oneline -20 ve git diff HEAD~5'yi denetleyin.
  5. POST — Run Secrets in JavaScript Bundles. Dağıtılan URL üzerinde pasif tarama. JS paketinde bir servis anahtarı görünürse, onu hemen döndürün — Cursor'nin otomatik tamamlaması muhtemelen onu satır içine almıştır.

Veritabanı erişim kontrolü (4 öğe)

Besteci sıklıkla çalışan kimlik doğrulama kodu oluşturur ancak RLS'yi atlar; "çalışıyor" anı, insanları eksik politika uygulamasına karşı kör eder.

  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. Composer bazen ilkeleri auth.uid()'yi işaretlemeden yazar. using maddesi olmayan allow select on public.items gibi politikalar tehlikeli derecede geniştir. user_id eşleşmesini zorunlu kılın.
  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.

Kimlik doğrulama ve oturumlar (4 öğe)

Cursor hızlı bir şekilde kimlik doğrulama akışları oluşturur ancak belirteçleri güvende tutan sunucu tarafı doğrulama işlemini sıklıkla gözden kaçırır.

  1. PRE — Ensure all auth routes use getUser(). API rotalarınızda getSession()'yi arayın ve await supabase.auth.getUser() ile değiştirin. getSession() doğrulanmamış bir çerezi okur; getUser(), Supabase arka ucuyla doğrulanır.
  2. PRE — Check Composer auth handlers for token expiry. Magic-link belirteçlerinin sunucu tarafından zorlanan expires_at'ye ihtiyacı vardır. Varsayılan Supabase 1 saattir — gerçek bir sebep olmadan Cursor'den bunu geçersiz kılmasını istemeyin.
  3. PRE — Audit the sign-in redirect guard. Oturum açtıktan sonra next sorgu parametresi yönlendirmesi doğrulanmalıdır: / ile başlamalıdır, asla // ile başlamamalıdır. Besteci bazen bunu atlar. Eksikse manuel olarak ekleyin.
  4. POST — Test logout server-side state destruction. Oturum açın, oturumu kapatın, çerezleri inceleyin (DevTools → Uygulama → Çerezler). Oturum çerezinin derhal temizlenmesi gerekir. Devam ederse, oturum kapatma işleyicisi durumu yok etmiyordur.

HTTP güvenlik başlıkları ve CSP (3 öğe)

Cursor varsayılan olarak nadiren ara yazılım oluşturur. Açıkça sormazsanız, CSP ve HSTS genellikle orada değildir.

  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. src/ dizin düzeniyle, Next.js yalnızca src/middleware.ts'yi alır. Kök düzeyindeki middleware.ts sessizce göz ardı edilir. CSP açılamıyorsa dosyanın doğru yerde olup olmadığını kontrol edin.
  3. POST — Run HTTP Security Headers. Pasif tarama raporlarında CSP, HSTS, X-Frame-Options, X-Content-Type-Options eksik. Raporu açın ve dağıtım platformunuza yönelik düzeltme kılavuzunu izleyin.

Dağıtım hijyeni (5 öğe)

Cursor uygulamaları genellikle iyi varsayılanlara sahip olan ancak build/deploy sınırı için açık bir sağlamlaştırma gerektiren Vercel'ye ulaşır.

  1. DEPLOY — Check Vercel env-var scoping. Ayarlar → Ortam Değişkenleri → her gizli dizi yalnızca Prodüksiyon kapsamına alınmalıdır. Asla sk_live_*'yi Önizleme veya Geliştirme ile paylaşmayın.
  2. DEPLOY — Disable build-log secret echo. vercel.json veya GitHub Eylemler iş akışınızda echo $SECRET varsa onu kaldırın. Derleme günlükleri herkese açık olarak arşivlenir; günlüklerdeki sırların güvenliği ihlal edilir.
  3. DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Vercel'nin Ayarları → Ortam Değişkenleri kullanımda değilken şifrelenir. GitHub Eylemlerin sırları hiç yoktan iyidir ancak dağıtım platformu entegrasyonu için değil, CI için tasarlanmıştır.
  4. POST — Verify CSP nonce on the deployed preview. Tarayıcıda bir Vercel Önizleme bağlantısı açın, DevTools → Ağ → kök HTML yanıtını açın. CSP başlığı bulunmalı ve istek başına benzersiz bir nonce ile 'strict-dynamic' içermelidir.
  5. POST — Rotate any key that ever shipped, even to Preview. Bir anahtar üretim paketine 10 dakika bile ulaşmışsa, güvenliği ihlal edilmiştir. Hemen döndürün.

Cursor'ye özel kazanımlar (4 öğe)

Cursor'nin güvenlik riskleri oluşturan iş akışına özgü kalıplar:

  1. Agent mode auto-fixes propagate old patterns. Agent'tan "kimlik doğrulama hatalarını düzeltmesini" isterseniz, aynı kimlik doğrulama dosyasını birden çok kez yeniden oluşturabilir ve her seferinde, kod tabanı bağlamındaysa aynı hizmet anahtarını satır içine alabilir. Önce orijinali temizleyin, ardından Temsilciden düzeltmesini isteyin.
  2. Cursor Index leaks intent. Cursor'nin @codebase indekslemesi güçlüdür ancak .cursor dizininiz açığa çıkarsa (yanlış yapılandırılmış S3, git geçmişi), indeks mimarinizi ve gizli kalıplarınızı açığa çıkarır. .cursor yerel tutun.
  3. Composer mode loses context between files. Composer'ın oluşturduğu her dosya yenidir. Bir istemci dosyası ve ardından bir API rotası oluşturmasını isterseniz, farklı Supabase istemci yapılandırmaları kullanabilirler. Her ikisini de inceleyin ve mimarinize uyduklarından emin olun.
  4. Autocomplete bias toward "working" over "secure". Cursor mevcut bağlamınızı geçen en hızlı kodu önerir. Testinizde NEXT_PUBLIC_SERVICE_KEY varsa, otomatik tamamlama bunu hatırlar ve yeniden önerir. Kodu modelle paylaşmadan önce test fikstürlerini temizleyin.

Sonraki adımlar

Cursor'ye özgü kalıpları kilitledikten sonra, general vibe coding security checklist (51 öğe) ve ardından step-by-step hardening ile çapraz kontrol yapın. Ayrıca araçları karıştırıyorsanız Claude Code checklist'ye bakın.

// scan your app

Okumayı bırak. Kendi uygulamandaki açıkları bulmaya başla.

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 katman — ayda 3 tarama, kart yok.
  • Herhangi bir URL'ye karşı pasif taramalar — etki alanı doğrulaması gerekmez.
  • Cursor, Claude Code, Lovable, Bolt, v0, Replit için ayarlandı.
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
Cursor security checklist: 25 items before ship · FixVibe