// 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.
- 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. 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. - 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. - 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 -20vegit diff HEAD~5'yi denetleyin. - 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.
- 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. Composer bazen ilkeleri
auth.uid()'yi işaretlemeden yazar.usingmaddesi olmayanallow select on public.itemsgibi politikalar tehlikeli derecede geniştir. user_id eşleşmesini zorunlu kılın. - 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.
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.
- PRE — Ensure all auth routes use
getUser(). API rotalarınızdagetSession()'yi arayın veawait supabase.auth.getUser()ile değiştirin.getSession()doğrulanmamış bir çerezi okur;getUser(), Supabase arka ucuyla doğrulanır. - 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. - PRE — Audit the sign-in redirect guard. Oturum açtıktan sonra
nextsorgu 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. - 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.
- 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.src/dizin düzeniyle, Next.js yalnızcasrc/middleware.ts'yi alır. Kök düzeyindekimiddleware.tssessizce göz ardı edilir. CSP açılamıyorsa dosyanın doğru yerde olup olmadığını kontrol edin. - 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.
- 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. - DEPLOY — Disable build-log secret echo.
vercel.jsonveya GitHub Eylemler iş akışınızdaecho $SECRETvarsa 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. - 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.
- 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. - 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:
- 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.
- Cursor Index leaks intent. Cursor'nin
@codebaseindekslemesi güçlüdür ancak.cursordizininiz 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..cursoryerel tutun. - 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.
- Autocomplete bias toward "working" over "secure". Cursor mevcut bağlamınızı geçen en hızlı kodu önerir. Testinizde
NEXT_PUBLIC_SERVICE_KEYvarsa, 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.
