// docs / security guides / pre-ship checklist
Vibe coding güvenlik kontrol listesi: gönderim öncesi 44 madde
Cursor, Claude Code, Lovable, Bolt, v0, Replit ve Windsurf ile oluşturulan uygulamalar için pratik, aşamalara göre düzenlenmiş bir kontrol listesi. Her öğe beş dakikadan kısa sürede işleme koyulabilir. Üretime geçmeden önce, ardından her büyük sürümden önce tekrar gözden geçirin. Öğeler yedi kategoride (gizli diziler, veritabanı, kimlik doğrulama, başlıklar, üçüncü taraf, dağıtım, izleme) gruplandırılır ve uygulandıkları dağıtım aşamasıyla etiketlenir.
PRE = ön dağıtım (kaynağınızı denetleyin). DEPLOY = dağıtım zamanında. POST = dağıtım sonrası doğrulama. Öğeler FixVibe referansını, ilgili yerlerde category.check-id formundaki kimlikleri kontrol edin.
Sırlar ve API tuşları (8 öğe)
Sabit kodlanmış anahtarlar, titreşim kodlu uygulamalarda en yaygın bulunan tek bulgudur. Onları uzak tutacak sekiz öğe:
- PRE — Audit
NEXT_PUBLIC_env vars.NEXT_PUBLIC_ön ekine sahip her şey istemci paketleri halinde gönderilir. Bunlardan biri Supabaseservice_roleanahtarıysa ("role":"service_role"ile JWT olarak çözülür), onu silin ve yalnızca sunucu istemcisi (src/lib/supabase/service.tsileimport 'server-only') aracılığıyla yönlendirin. - PRE — Grep for hardcoded provider keys.
sk_live_,pk_live_,STRIPE_SECRET,sk-ant-,sk-,AIza,AKIAve JWT-görünüm dizeleri (eyJ) için kaynak arayın. Her isabeti.env.localiçine taşıyın ve yalnızcaprocess.env.*sunucu tarafı aracılığıyla referans verin. - PRE — Verify
.gitignore..env*.local,.npmrc,.yarnrconaylayın; sağlayıcıya özel kimlik bilgileri dosyaları yoksayılır. Halihazırda taahhüt edilmiş herhangi bir şeyi bulmak için sağlayıcı kalıplarınız üzerindengit ls-fileskanalını çalıştırın. - PRE — Scan the built bundle.
npm run buildkomutunu çalıştırın, ardından grep.next/staticve aynı modeller için herhangi birdist/çıktısını çalıştırın. Bir anahtar pakete ulaşırsa geliştiricinin hiçbir zaman temiz bir ortam ayrımı olmadı. - DEPLOY — Set secrets per environment. Vercel: Ayarlar → Ortam Değişkenleri, her birinin kapsamını Prodüksiyon / Önizleme / Geliştirme olarak belirleyin.
sk_live_*'yi asla Önizleme ortamıyla paylaşmayın. Satır içi iş akışı sırlarını değil, Vercel'nin şifrelenmiş env-var depolama alanını kullanın. - DEPLOY — Disable build-log secret echo. Bazı CI yapılandırmaları
echoenv, derleme sırasında değişiklik gösterir. Değeri genel derleme günlüklerine aktaracak herhangi birecho $SECRETiçinvercel.json, GitHub Eylemler iş akışlarınızı veya Cloudflare Sayfa ayarlarınızı denetleyin. - POST — Run a passive scan. FixVibe'nin Free katmanı şunu kapsar: dağıtılan URL'yi yapıştırın, yaklaşık 20 saniye bekleyin,
secrets.*bulgularını arayın. secrets.browser-storage kontrolü, SDK'nin yanlış kullanımı yoluylalocalStorageveyasessionStorage'ye gelen anahtarları yakalar. - POST — Rotate any key that ever shipped. Bir anahtar, halka açık bir pakette birkaç dakika boyunca kaldıysa, onu tehlikeye atılmış olarak değerlendirin. Kontrol paneli aracılığıyla Supabase hizmet rolü anahtarlarını döndürün, Stripe kısıtlı anahtarları yeniden oluşturun, konsolları aracılığıyla Anthropic / OpenAI / Google anahtarlarını iptal edin.
Veritabanı erişim kontrolü: RLS ve Firestore kuralları (6 öğe)
BaaS varsayılanları bilinçli olarak izinlidir, bu nedenle ilk eğitim çalışır. Production açık politikalara ihtiyaç duyar.
- PRE — Force RLS on every
public.*table. Supabase içinde: her tablodaALTER TABLE ... ENABLE ROW LEVEL SECURITYveFORCE ROW LEVEL SECURITYbulunmalıdır. Force önemlidir: Bu olmadan Postgres, masa sahipleri için RLS'yi atlar. - PRE — Write a policy per (table, role, action). Minimum:
auth.uid()ile birleşen bir SELECT politikası. Daha iyi: INSERT / UPDATE / DELETE politikalarını ayırın, böylece bir UPDATE, sahipliği yeniden yönlendirenuser_iddeğişikliklerine gizlice giremez. - PRE — Replace default Firebase rules. Varsayılan test modu kuralları
allow read, write: if true;şeklindedir. Koleksiyon başına kimlik doğrulama kurallarıyla değiştirin:match /users/{userId}ileallow read, write: if request.auth.uid == userId; - PRE — Lint migrations in CI. Birleştirmeden önce
supabase db lintveya eşdeğerini çalıştırın. Herhangi birCREATE TABLE public.*'de eşleşen bir RLS politikası yoksa, CI derlemede başarısız olmalıdır. - DEPLOY — Confirm RLS survived deploy. Dağıtımdan sonra Supabase Studio'da yeniden kontrol edin: Tablolar → her satır → RLS geçişi ON'dir. Production veritabanı geçişleri zaman zaman politika dosyalarının önünde yarışır; Politikanın yayında olduğunu doğrulayın.
- POST — Run an active scan against a verified domain. baas.supabase-rls aktif kontrolü, anon anahtarını kullanarak küçük bir tohum satırına yazar ve yazmanın başarılı olup olmadığını bildirir — i.e. RLS aslında zorunlu değildir.
Kimlik doğrulama ve oturumlar (7 öğe)
AI- kodlu uygulamalardaki kimlik doğrulama hataları genellikle incelikli olma eğilimindedir: belirteç doğrulamasında tek tek, kaçırılan bir HttpOnly işareti, getUser() olması gereken bir getSession().
- PRE — Replace
getSession()withgetUser().getSession()çerezi okur ve ona güvenir;getUser(), Supabase arka ucuyla doğrulanır. Sunucu rotalarında her zamangetUser()kullanın. - PRE — Confirm token expiry. Magic-link, şifre sıfırlama ve e-posta doğrulama belirteçlerinin sunucu tarafından zorunlu kılınan sürelerinin sona ermesi gerekir. Varsayılan Supabase sihirli bağlantıların süresi 1 saat sonra dolar; gerçek bir neden olmadan bunu daha yüksek bir sayıya geçersiz kılmayın.
- PRE — Verify JWT
audandexp. Belirteçlerin kodunu herhangi bir yerde manuel olarak çözerseniz her iki talebi de kontrol edin. Daha iyisi: bunu sizin için yapan SDK'ningetUser()özelliğini kullanın. - PRE — Audit cookie flags. Özel oturum çerezleri
Secure; HttpOnly; SameSite=Lax(veya OAuth olmayan akışlar içinStrict) olmalıdır.localStorage'de oturum materyali yok. - PRE — Validate the
nextredirect param. Oturum açtıktan sonrakinextsorgu parametresi//ile değil/ile başlamalıdır (açık yönlendirme attacker.example'ye). Sunucu tarafındaki diğer her şeyi reddedin. - POST — Test logout. Oturum açın, oturumu kapatın, çerezleri inceleyin (DevTools → Uygulama → Çerezler). Oturum çerezinin aynı yanıtta temizlenmesi gerekir. Devam ederse, oturum kapatma işleyicisi aslında sunucu tarafı durumunu bozmuyordur.
- POST — Active probe. active.auth-flow ve active.account-enumeration yüzeydeki bozuk kimlik doğrulama sınırlarını kontrol eder; "kullanıcı mevcut" ve "yanlış şifre" ile ilgili farklı yanıtlar, oturum açma sırasında eksik hız sınırı, imzasız sıfırlama belirteçleri.
HTTP güvenlik başlıkları ve İçerik Güvenliği Politikası (6 öğe)
Başlıklar, tüm işlem hattındaki en ucuz sertleştirmedir ve codegen tarafından en tutarlı şekilde atlanır.
- PRE — Ship a real CSP. Minimum:
script-src 'nonce-{NONCE}' 'strict-dynamic'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'.script-src'de'unsafe-inline'yok. Next.js, ara yazılımx-nonceistek başlığını ayarladığında nonce'ı otomatik olarak uygular. - PRE — Add the legacy three.
X-Content-Type-Options: nosniff,X-Frame-Options: DENY(veya yalnızca CSPframe-ancestors'ye güvenin),Strict-Transport-Security: max-age=31536000; includeSubDomains. - PRE — Tighten
Referrer-Policy. Varsayılanstrict-origin-when-cross-originçoğu uygulama için uygundur.unsafe-urlgöndermeyin veya hiç başlık göndermeyin. - PRE — Replace
Access-Control-Allow-Origin: *. Bunun için Grep'i kullanın. Açık bir kaynak izin verilenler listesiyle değiştirin.credentials: includeile birlikte*olduğu her yerde, tarayıcı isteği reddedecektir; ancak bu, yanlış yapılandırılmış bir arka uca karşı bir savunma değildir. - DEPLOY — Verify headers post-deploy. DevTools → Ağ'ı açın → kök belgenize → Başlıklar sekmesine tıklayın. CSP, HSTS, X-Frame-Options, X-Content-Type-Options mevcut olmalıdır. CSP,
script-srciçinde'unsafe-inline'içermemelidir. - POST — Run headers.security-headers. Pasif başlık kontrolü, eksik olan her başlığı dağıtım platformu düzeltme kılavuzuyla birlikte rapor eder (Vercel
vercel.json, Cloudflare Pages_headers, Netlify_headers, Next.js ara katman yazılımı).
Üçüncü taraf entegrasyonları ve APIs (5 öğe)
Eklediğiniz her komut dosyası bir CSP muafiyeti ve potansiyel bir tedarik zinciri yüzeyidir. Üçüncü taraflara güven sınırınızın bir parçası olarak davranın.
- PRE — Reverse-proxy analytics where possible. PostHog, Plausible, Umami'nin tümü kendi etki alanınız (e.g.
/api/posthog) üzerinden proxy kullanmayı destekler. Bu,connect-src'yi aynı kaynakta tutar ve reklam engelleyicilerden kurtulur. - PRE — CSP-allowlist the rest. Google Analytics, Stripe.js, Sentry, Intercom, GTM vb. için her satıcının kaynağını eşleşen CSP direktifine ekleyin (
script-srcyükleyiciler için,connect-srctelemetri için,frame-srciframe'ler için,img-srcpikseller için). - PRE — Use Stripe Checkout, not raw card forms. Stripe Ödeme, üst düzey bir yönlendirmedir; komut dosyası için CSP girişine gerek yok. Barındırılan PCI yüzeyi tamamen Stripe alan adında bulunur. Yalnızca güçlü bir nedeniniz varsa kendinizinkini yuvarlayın.
- PRE — Lock
package-lock.jsonin CI. Üretim yapılarındanpm ci(npm installdeğil) komutunu çalıştırın. Bağımlılıkları her sürümden öncenpm auditveya Snyk ile denetleyin. - POST — Watch discovery.tech-fingerprint. Pasif teknoloji yığını keşfi, bir tarayıcının görebileceği kitaplık sürümlerini ortaya çıkarır. Bir EOL React, jQuery veya Bootstrap gönderirseniz, FixVibe onu işaretler ve bilinen CVE'lere bağlantı verir.
Dağıtım hijyeni ve altyapısı (8 öğe)
Ne dağıttığınız kadar nasıl dağıttığınız da önemlidir. AI-kodlu uygulamalar özellikle açık konuşlandırma sağlamlaştırmasından yararlanır.
- PRE — Disable
x-powered-by.next.config.jsiçinde:poweredByHeader: false. Ücretsiz sürüm açıklama sinyalini kaldırır. - PRE — Confirm middleware lives at
src/middleware.ts.src/dizin düzeniyle, Next.js, kök düzeyindekimiddleware.ts'yi yok sayar. Yanlış yerleştirilmiş ara yazılım, CSP / kimlik doğrulama başlıklarını / hız sınırlarını sessizce ayarlamayı başaramıyor. - PRE — Sanity-check Vercel deployment protection. Prodüksiyon herkese açık olmalıdır; Önizleme şifre korumalı olmalı veya kuruluş üyeleriyle sınırlı olmalıdır. discovery.platform-vercel yüzeyi bildirir.
- PRE — Block dotfile and config probes at the edge.
/.env,/.git/*,/.aws/*,/.next/tracedesenleri için yeniden yazma veya reddetme kuralı ekleyin. Vercel bunların çoğu için varsayılan olarak 403 değerini döndürür; çapraz kontrol. - DEPLOY — Separate environments. Prodüksiyon, Önizleme, Geliştirme. Her birinin kendine ait sırları vardır. Canlı tuşlar hiçbir zaman Önizleme'ye ulaşmaz, Stripe test modu asla Prodüksiyon'a ulaşmaz.
- DEPLOY — Enable Vercel Web Application Firewall. Pro ve Kurumsal planlar, yönetilen kurallara sahip WAF içerir. Cloudflare Pages'da Bot Dövüşü Modu bulunur. Her ikisi de otomatik tarayıcının kötüye kullanımını ve şifre püskürtme yükünü azaltır.
- Üretim alanınıza karşı POST — Verify TLS configuration. SSL Labs veya testssl.sh. TLS minimum 1,2, TLS 1,3'ü tercih edin, zayıf şifre yok, HSTS ön yüklemeye uygun.
- POST — Confirm health-check endpoints are minimal. Bir
/api/health, gövdesiz olarak200 OKdeğerini döndürmelidir. Kimlik doğrulaması olmadan ortamı yankılamayın, karma oluşturmayın veya zaman damgasını dağıtmayın.
Devam eden izleme ve yeniden tarama (4 öğe)
Güvenlik tek seferlik bir gemi öncesi denetimi değildir. Drift her konuşlandırmada gerçekleşir.
- Verify your production domain in FixVibe. Dashboard → Domains → DNS TXT veya HTTP dosya doğrulaması. Bu, planlanmış yeniden taramaların, aktif incelemenin ve canlı tehdit izlemenin kilidini açar.
- Schedule passive re-scans. Pro planlar 3 saatlik tempoyu destekler; Unlimited 6 saatlik ritmi destekler. Yeni bir bulguyu ortaya çıkaran her planlanmış tarama, bir e-postayı (ve kablolu bağlantı kurduysanız bir web kancasını) tetikler.
- Wire outbound webhooks. Account → Webhooks → bir HTTPS uç noktası ekleyin,
scan.completed+finding.created+scan.active_api.first_used'ye abone olun. Slack / Discord / PagerDuty'ye yönlendirin. - Enable live threat monitoring on Unlimited. Sertifika şeffaflığı günlüğü farklılıkları, DNS değişiklikleri, JS paket gizli sızıntıları, tehdit istihbaratı listeleri — bir sonraki programlı taramada değil, tespit edildikleri anda tetiklenirler.
Sonraki adımlar
Bu öğelerin neden önemli olduğuna dair eğitim ortamı ister misiniz? AI-generated code security scanning'yi okuyun. Her sağlamlaştırma adımı için somut kod parçacıkları mı istiyorsunuz? Bkz. How to secure an app built with AI coding tools.
