Tüm yazılar
Kontrol Listesi8 dk okuma

AI ile bir uygulama mı yayınlıyorsun? Yayına almadan önce şu 7 şeyi kontrol et

Cursor, Claude Code, v0, Bolt veya Lovable ile geliştirmek, bir fikirden yayınlanmış bir uygulamaya geçmenin şimdiye kadarki en hızlı yoludur. Ama bir püf noktası var: bu araçlar "demoda çalışıyor" için optimize eder ve neredeyse hiçbiri, açıkça istemedikçe güvenlik sıkılaştırması eklemez.

Bu, vibe coding'i bırakmak için bir sebep değil. Yayına almadan önce (ya da hemen sonrasında) kısa bir kontrol listesi çalıştırmak için bir sebep. Aşağıdaki yedi sorun, AI ile üretilen uygulamalarda en sık ortaya çıkanlar — hepsi hızlıca kontrol edilir ve hızlıca düzeltilir, çoğu çözümse tek bir yapılandırma değişikliği ya da AI aracına geri gönderilen tek bir prompt.

1. Frontend JavaScript'ine gömülü API key'leri

Bu, en yıkıcı ve yapılması en kolay hatadır. AI aracına "Stripe ödemeleri ekle" ya da "OpenAI'ye bağlan" dersin ve secret key'i doğrudan bir istemci bileşenine bağlar. Uygulama çalışır — ve secret key'in artık her ziyaretçinin tarayıcısına gönderilir; DevTools'u açan ya da JS bundle'ında arama yapan herkes tarafından okunabilir.

NEXT_PUBLIC_ (veya VITE_, ya da REACT_APP_) önekli her şey, build zamanında istemci bundle'ına gömülür. Secret key'ler — Stripe sk_live_, OpenAI sk-, veritabanı URL'leri, service-role key'leri — yalnızca sunucu tarafı kodda okunmalıdır: API route'ları, server component'leri veya edge function'lar.

Hızlı kontrol: yayındaki siteni aç, sayfa kaynağına ve paketlenmiş JS'e bak ve sk_live, sk- ve .env'indeki key'lerin ilk karakterlerini ara. Herhangi biri görünüyorsa, önce key'i rotate et, sonra çağrıyı sunucu tarafına taşı.

Frontend kodunda API key'leri: neden olur ve nasıl düzeltilir

2. Doğrudan web root'undan sunulan .env veya .git

Şaşırtıcı sayıda yayındaki uygulama, sadece istersen .env dosyasını — ya da tüm .git dizinini — seve seve döndürür. Yanlış yapılandırılmış tek bir statik dosya sunucusu ya da her şeyi public klasöre kopyalayan bir framework şablonu yeterlidir.

Etki bütünseldir: veritabanı kimlik bilgileri, auth secret'ları, API key'leri, hepsi tek bir dosyada. Açıkta kalan bir .git dizini neredeyse aynı derecede kötüdür, çünkü bir saldırgan; commit'lenmiş ve sonradan "kaldırılmış" secret'lar dâhil tüm kaynak geçmişini yeniden oluşturabilir.

Hızlı kontrol on saniye sürer:

curl -i https://yourapp.com/.env
curl -i https://yourapp.com/.git/config

# Both should return 404 (or 403) — never 200.
Açıkta kalan .env dosyaları: tam rehber

3. Content-Security-Policy yok

AI araçları neredeyse hiç güvenlik header'ı eklemez ve en çok önem taşıyanı CSP'dir. Onsuz, uygulamanın herhangi bir yerindeki tek bir HTML-injection veya XSS hatası, bir saldırganın kullanıcılarının tarayıcılarında keyfi JavaScript çalıştırmasına — oturumları çalmasına ve veri sızdırmasına — olanak tanır.

Çoğu uygulama için iyi bir başlangıç politikası: default-src 'self', object'leri ve iframe'e almayı engelle ve yalnızca gerçekten kullandığın üçüncü taraf script origin'lerine izin ver. Katı başla, bilinçli gevşet — asla tersi değil.

// next.config.js
const csp = [
  "default-src 'self'",
  "script-src 'self'",
  "style-src 'self' 'unsafe-inline'",
  "img-src 'self' data:",
  "base-uri 'none'",
  "frame-ancestors 'none'",
  "object-src 'none'",
].join("; ");

module.exports = {
  async headers() {
    return [{ source: "/:path*", headers: [{ key: "Content-Security-Policy", value: csp }] }];
  },
};
CSP açıklaması: direktifler, nonce'lar ve yaygın hatalar

4. Secure, HttpOnly ve SameSite olmadan oturum cookie'leri

Auth kütüphanen bir AI aracı tarafından varsayılan seçeneklerle bağlandıysa, oturum cookie'sinin flag'lerini doğrulamaya değer. HttpOnly olmayan bir cookie, enjekte edilen herhangi bir script tarafından okunabilir (küçük bir XSS'i tam hesap ele geçirmeye dönüştürür), Secure olmayan biri düz HTTP üzerinden sızabilir ve SameSite olmayan biri cross-site request forgery'yi çok kolaylaştırır.

Yayındaki uygulamanda DevTools → Application → Cookies'i aç. Her oturum ya da auth cookie'si üçünü de göstermeli: Secure, HttpOnly ve SameSite=Lax (veya Strict).

Cookie güvenlik flag'leri: her biri neye karşı korur

5. Asla HTTPS'e dönüşmeyen HTTP (ve HSTS yok)

Çoğu hosting platformu sana HTTPS'i otomatik verir — ama pek çok uygulama hâlâ yönlendirme yapmadan düz HTTP üzerinden seve seve yanıt verir ya da yönlendirir ama asla bir Strict-Transport-Security header'ı göndermez. Her iki durumda da, alan adını adres çubuğuna yazan bir kullanıcı ilk isteğini şifrelenmemiş yapar ve o istek, yönlendirmen gerçekleşmeden önce ele geçirilebilir ya da downgrade edilebilir.

Çözüm iki satır yapılandırmadır: HTTP'den HTTPS'e kalıcı bir 301 yönlendirmesi, artı bir HSTS header'ı (max-age=31536000; includeSubDomains) ki tarayıcılar bir daha asla downgrade yapmayı reddetsin.

HSTS: tek bir header downgrade saldırılarını nasıl bitirir

6. Her şeye izin verecek şekilde ayarlanmış CORS

AI ile üretilen bir frontend, geliştirme sırasında kendi API'sine ulaşamadığında üretilen "çözüm" neredeyse her zaman Access-Control-Allow-Origin: *'tır — bazen kimlik bilgilerine de izin verilerek. Bu, internetteki her web sitesine, API'ni ziyaretçilerinin tarayıcılarından çağırabileceğini söyler.

Kendi frontend'ine hizmet eden bir API için, izin verilen origin tam olarak kendi alan adın olmalı ve başka hiçbir şey olmamalıdır. Joker CORS yalnızca gerçekten herkese açık, kimlik doğrulamasız, salt okunur API'ler için kabul edilebilir.

CORS yanlış yapılandırması: * ne zaman güvenlik açığına dönüşür

7. Alan adında SPF veya DMARC yok

Bu, uygulamanın koduyla hiç ilgili değil — alan adınla ilgili. SPF ve DMARC DNS kayıtları olmadan, herkes [email protected]'dan geliyormuş gibi görünen e-postalar gönderebilir ve alıcı posta sunucularının bunun sahte olduğunu anlaması mümkün değildir. Bu, markanı giyip kendi kullanıcılarına karşı yapılan phishing'dir.

İki DNS TXT kaydı bunu çözer. E-postayı Resend, Postmark ya da SES gibi bir sağlayıcı üzerinden gönderiyorsan, dokümanları sana tam SPF değerini verir; yanına bir DMARC politikası ekle ve meşru postanın geçtiğini doğruladığında onu p=none'dan p=quarantine'e sıkılaştır.

SPF ve DMARC: alan adında e-posta spoofing'ini durdurmak

Yedisini tek seferde kontrol et

Bu listedeki her madde dışarıdan tespit edilebilir; bu da onu tek tek elle çalışmak zorunda olmadığın anlamına gelir. AppSafe tüm bu kontrolleri — artı SSL/TLS, subdomain takeover, source map'ler ve daha fazlasını — tek bir taramada çalıştırır, sonucu A–F arası notlandırır ve her bulgu için doğrudan Cursor ya da Claude Code'a geri yapıştırabileceğin bir AI düzeltme prompt'u verir.

Ana sayfadaki hızlı tarama kayıt gerektirmez. Tam tarama (açıkta kalan secret kontrolleri dâhil) yalnızca sahip olduğunu doğruladığın alan adlarında çalışır — bilinçli olarak, çünkü başkasının JS bundle'larında key aramayacağız.

Bu kontrol listesini otomatik çalıştır

Tek bir ücretsiz tarama, uygulamanı tüm bu sorunlara karşı kontrol eder ve her bulgu için sana bir AI düzeltme prompt'u verir.

Uygulamamı ücretsiz tara