FixVibe

// docs / security guides / ai tooling analysis

AI kodlama araçları neden güvenlik boşlukları bırakır

Cursor, Claude Code, Lovable, Bolt, v0 ve benzeri AI kodlama araçları hızlı bir şekilde gönderilir ve geliştiricileri standart yoğun işlerden kurtarır. Ayrıca güvenlik konusunda yapısal kör noktaları var. Bu herhangi bir aracın başarısızlığı değil; LLM'lerin nasıl eğitildiğinin ve nasıl optimize edildiklerinin bir yan ürünüdür. Bu boşlukların temel nedenlerini anlamak, onları kapatmanın ilk adımıdır.

AI-oluşturulan kodun güvenliği neden farklıdır?

AI kodlama araçlarının ürettikleri güvenlik açıklarının yapısal nedenleri vardır. Bunlar rastgele gözetimler değil; bunlar eğitim ve optimizasyonun öngörülebilir eserleridir.

  • Training data skews toward "make it work." Açık kaynak kodlu veri havuzları ve eğitimler LLM eğitimine hakimdir. Medyan OSS deposu, güvenlik güçlendirmesinin bir örneği olmak için değil, bir sorunu çözmek için yazılmıştır. Bir LLM, güvenli kodun dağıtımını değil, vahşi ortamda kodun dağıtımını öğrenir.
  • Autocomplete is sticky. service_role anahtarını kullanan bir kod parçacığını yapıştırdığınızda, bu bir sonraki dosyanın şablonu olur. Cursor'nin otomatik tamamlama özelliği onu hiçbir zaman ait olmadığı bir istemci bileşeninde önerecektir. Araç, optimize edildiği şeyi (hız) yapıyor ancak güvenlik sınırının farkında değil.
  • No long-term context or incident memory. Bir üretim veritabanını eksik bir WHERE cümlesiyle yakan bir insan geliştirici, bu dersi yıllarca ileriye taşıyor. LLM'nin epizodik belleği yoktur. Her dosya yeni bir başlangıçtır. Araç, son RLS baypasınızdan veya ekibinizin olay sonrası otopsisinden ders almaz.
  • Speed is the rewarded metric. Geliştiriciler bu araçları hızlı gönderildikleri için seçiyorlar. Gecikme geri bildirimi anında ve doğrudandır. Güvenlik geri bildirimi yok veya gecikmeli; gönderimden üç hafta sonra FixVibe taramasında bulunan bir güvenlik açığı. LLM, gerçek zamanlı olarak ödüllendirilen metrik insanlar için optimize edildi.
  • Implicit trust in platform defaults. Cursor bir Vercel uygulaması oluşturduğunda, Vercel'nin varsayılanlarının güçlendirilmiş olduğunu varsayar. Bunlardan bazıları şunlardır: auto-HTTPS, imzalı çerezler, DDoS koruması. Diğerleri değildir: varsayılan olarak hayır CSP, HSTS yok, izin veren CORS. Oluşturulan kod, her zaman doğrulanmayan platform varsayımlarını devralır.

Boşluk 1: İstemci paketlerindeki sırlar

Hizmet rolü API anahtarları, OAuth belirteçleri ve özel anahtarlar, tarayıcıya gönderilen JavaScript paketlerinde bulunur. FixVibe bunları secrets.browser-storage ve secrets.bundle-leak bulgular olarak işaretler. Anahtarlar kaynak haritalarında, küçültülmüş kodda veya JS düz metinde bulunabilir.

Why it happens: Cursor Hizmet rolüne sahip bir istemciyi başlatan bir Supabase pasajını yapıştırmak, kodun artık otomatik tamamlamada olduğu anlamına gelir. Oluşturulan bir React bileşeni "veritabanındaki tüm öğeleri al" komutunu ister ve Cursor hizmet-istemci içe aktarımını önerir. Yalnızca sunucu ve istemci tarafı kodu arasındaki sınır LLM için soyuttur.

Fix: Gizli anahtarları yalnızca genel anahtarlar için NEXT_PUBLIC_ işaretli ortam değişkenlerinde saklayın. Hizmet anahtarları, özel API anahtarları ve imzalama sırları, import 'server-only' ile src/lib/secrets.ts içinde bulunmalıdır. Hassas hizmetleri çağırmak için sunucu eylemlerini veya API yollarını kullanın, istemci bileşenlerini asla kullanmayın.

Boşluk 2: Eksik veya tamamlanmamış Satır Düzeyinde Güvenlik

Supabase tabloları RLS etkinleştirilmeden oluşturulur. Firebase Firestore kuralları hiçbir zaman yazılmaz veya izin verilen test modunda bırakılmaz. Anon kullanıcıları her satırı okuyabilir ve yazabilir. FixVibe bunu baas.supabase-rls ve baas.firebase-rules olarak işaretler.

Why it happens: RLS Postgres'e özgü bir özelliktir. Rails, Django, Laravel ve Express konusunda eğitim almış LLM'ler, uygulama katmanı kimlik doğrulama kontrollerini norm olarak görüyor. Supabase üzerinde RLS'nin etkinleştirilmesi, açık ALTER TABLE ifadeleri ve politika tanımları gerektirir; eğitim verilerinde daha az yaygın olan modeller.

Fix: Supabase için, her tabloda RLS'yi ALTER TABLE public.table_name ENABLE ROW LEVEL SECURITY; ALTER TABLE public.table_name FORCE ROW LEVEL SECURITY; ile zorunlu kılın. Satırların kapsamını kimliği doğrulanmış kullanıcı veya kuruluşa göre belirleyen politikalar yazın. Firebase için kuralları hiçbir zaman varsayılan test modu olarak bırakmayın; Kimliği doğrulanmış kullanıcıya yönelik açık kurallar yazın.

Boşluk 3: Kimlik doğrulama sınırı karışıklığı

Oturumlar istemci tarafında getSession() (doğrulanmamış bir çerezi okuyan) kullanılarak doğrulanır. Sihirli bağlantıların son kullanma tarihi yoktur. JWTs aud ve exp kontrollerini atlayın. Parola sıfırlama işlemleri geri alınabilir. FixVibe bunları active.auth-flow bulgular olarak işaretler.

Why it happens: Supabase Auth, Clerk ve benzeri hizmetler oturum durumunu yönetir, ancak API'lerinin güvenli ve güvensiz modları vardır. getSession() kullanışlıdır ancak doğrulanmamıştır. LLM, eğitim verilerinde API rahatlığını güvenli olandan daha sık görür. Sunucu tarafı belirteç doğrulaması soyuttur ve açık HTTP üstbilgilerini veya ara yazılım çağrısını gerektirir.

Fix: Her zaman supabase.auth.getUser() sunucu tarafını kullanın. Korunan rotalarda asla getSession()'ye güvenmeyin. Her istekte JWTs'yi doğrulayın, exp, aud'yi ve imzayı kontrol edin. Erişim belirteçleri için belirteç geçerlilik süresini 1 saate ayarlayın ve daha uzun oturumlar için yenileme belirteçlerini kullanın.

Boşluk 4: Eksik HTTP güvenlik başlıkları

Hayır Content-Security-Policy, hayır X-Frame-Options, hayır Strict-Transport-Security, hayır X-Content-Type-Options. FixVibe bunu headers.security-headers bulgular olarak işaretler.

Why it happens: Güvenlik üstbilgileri dağıtım platformuna özeldir. Cursor, Next.js için kod üretir; CSP ayarı bir next.config.js ince ayarı, bir ara yazılım veya vercel.json geçersiz kılma gerektirir. Bunlar varsayılan proje iskelelerinde değildir. "Başlıklar DevOps içindir" zihinsel modeli hâlâ yaygındır.

Fix: next.config.js veya ara yazılımda CSP'yi hemen destekle ayarlayın: Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-...'; .... HSTS ekleyin: Strict-Transport-Security: max-age=31536000; includeSubDomains. Statik ana bilgisayarlar için Vercel'nin vercel.json başlıklarını veya ara yazılımını kullanın.

Boşluk 5: Üçüncü taraf entegrasyon yanlış yapılandırmaları

Stripe anahtarları, Sentry belirteçleri, Antropik API anahtarları sabit kodlanmıştır veya depolara ayrılmıştır. Analitik kökenleri aşırı hoşgörülüdür. npm bağımlılıkları güncel değil. FixVibe taramaları bunları discovery.tech-fingerprint ve gizli denetleyicilerimiz altında bulgular olarak işaretler.

Why it happens: Entegrasyonlar belgelerden ve öğreticilerden yapıştırılmıştır. LLM, sabit kodlanmış değerler de dahil olmak üzere deseni kopyalar. Env-var disiplini, CI/CD'de açık bir disiplin gerektirir; LLM bunu uygulayamaz.

Fix: Her üçüncü taraf kimlik bilgisi için ortam değişkenlerini kullanın. Sırları dağıtım platformunuzda (Vercel, Netlify, Heroku veya bir kasada) saklayın. npm audit ile aylık olarak npm bağımlılıklarını denetleyin. Güvenlik güncellemeleri mevcut olduğunda otomatik halkla ilişkiler için Dependabot veya Renovate'i kullanın.

Düzeltme modeli

Bu boşlukları kapatmak sıfırdan yeniden inşa etmeyi gerektirmez. Desen tutarlıdır:

  1. Audit: Canlı uygulamanıza karşı FixVibe komutunu çalıştırın. Repo taramaları için FixVibe GitHub Uygulamasını etkinleştirin. Bulguları toplayın - sırlar, RLS, kimlik doğrulama, başlıklar, üçüncü taraf.
  2. Sertleştirin: Yüksek güvenilirlikli bulguları düzeltin. RLS + FORCE'u etkinleştirin. Sırları ortam değişkenlerine taşıyın. Middleware'de CSP ve HSTS ayarlayın. Sunucu tarafında auth doğrulaması kullanın. Coding-agent isteminden yalnızca kod/yapılandırma değişikliklerinin geçerli olduğu yerlerde yararlanın ve DNS veya sağlayıcıya ait düzeltmeler için operatör adımlarını izleyin.
  3. Monitor: Doğrulanmış bir alanda günlük pasif taramaları veya haftalık aktif taramaları planlayın. Slack'e web kancaları ayarlayın. Her kritik bulgu gemiye bindikten birkaç dakika sonra bir alarmı tetiklemelidir.
  4. Yanıtlayın: Bir bulgu ortaya çıktığında, düzeltme sahibine uygun FixVibe iyileştirme eylemini kopyalayın: kod/yapılandırma çalışması için coding-agent istemi veya DNS, sağlayıcı konsolu, sır rotasyonu ve manuel inceleme için operatör adımları. Onaylamak için yeniden tarayın.

Saha nereye gidiyor

Bu boşlukları düzeltmek günümüzde ekiplerin işidir. Önümüzdeki 2-3 yıl içinde sınır değişiyor: çerçeveler ve araçlarda daha iyi varsayılanlar (Next.js ara katman yazılımı otomatik CSP, varsayılan olarak Supabase RLS), IDE-time güvenlik geri bildirimi (Cursor bir hizmet anahtarını bir istemci bileşenine yapıştırmak üzere olduğunuzda sizi uyaran öneriler) ve MCP-driven otomatik düzeltme (kodlama aracınız FixVibe bulgularına erişebilir ve bunları bağımsız olarak düzeltebilir). FixVibe'in halka açık changelog hangi boşlukların önce kapandığını takip ediyor.

Sonraki adımlar

Lansman öncesinde go/no-go kontrol listesi için bkz. Pre-launch SaaS security checklist. Kod parçacıkları ve gerçek hata modelleri ile adım adım sağlamlaştırma kılavuzu için How to secure an app built with AI coding tools bölümünü okuyun.

// scan your app

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

Bir URL bırakın — FixVibe, bu kılavuzdaki tüm pasif kontrolü ve ayrıca 200'den fazla kişiyi bir dakikadan kısa sürede çalıştırır. Free, yükleme yok, kart yok.

  • 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.
AI kodlama araçları neden güvenlik boşlukları bırakır — Docs · FixVibe