Yapay zeka tarafından oluşturulan kod çalışır. Çalıştırılır. Doğru görünür. Aynı zamanda hemen hemen her projede aynı beş güvenlik açığıyla birlikte gelir. Bunlar teorik riskler değil — Claude, Cursor, Replit veya Copilot tarafından üretilen neredeyse her kod tabanında açık olarak güvenlik talep etmediğiniz sürece ortaya çıkan belirli açıklardır.

Geçen yıl düzinelerce vibe-coded projesini denetledim ve aynı beş hata bunların en az %80'inde görülüyor. Her birini düzeltmek 30 dakikadan az sürer. İşte neye bakacağınız ve bunu tam olarak nasıl düzelttiğiniz.

Hızlı Bilgiler
Bu kimin için
Yapay zeka tarafından oluşturulan kodu kullanıcılara veya müşterilere yayınlayan herkes
5'in tamamını düzeltme süresi
Karmaşıklığa bağlı olarak 1–3 saat
Varsayılan Stack
Next.js/React + Supabase/Firebase + Vercel/Netlify
Önem Düzeyi
Hata #1 ve #2 kullanıcı verilerini açığa çıkarabilir — önce bunları düzeltin
Son doğrulama
Nisan 2026

Hata 1: Ön Uç Kodunda Sabit Kodlanmış API Anahtarları

Nasıl olur: Claude'a "Supabase'e bağlan" veya "Stripe ödemesi ekle" dediğinizde ve API anahtarı doğrudan bir React bileşenine yapıştırılmış kod üretir. Kod mükemmel şekilde çalışır — ve gizli anahtarınız tarayıcı DevTools'u açan ve Network sekmesini veya JavaScript kaynağını kontrol eden herkes tarafından görülebilir.

Neden tehlikelidir: Supabase hizmet rolü anahtarınız tüm veritabanı güvenliğini atlatır. Stripe gizli anahtarınız birisinin kartlardan ücret almasına veya geri ödeme vermesine izin verir. OpenAI anahtarınız birisinin hesabınızda binlerce API çağrısı için ücret almasına izin verir. Botlar etkin olarak genel GitHub depoları ve dağıtılmış siteler için açığa çıkmış anahtarları tarar.

Çözüm: Her gizli anahtarı ortam değişkenlerine taşıyın. Next.js'de, yalnızca NEXT_PUBLIC_ ile başlayan değişkenler tarayıcıya ulaşır. Yazma erişimi, yönetici erişimi veya finansal erişim veren herhangi bir anahtar yalnızca sunucu tarafında olmalıdır.

Anahtarları .env.local dosyasına taşıdıktan sonra, tüm kod tabanında eski anahtar değerlerini arayın ve gittiklerinden emin olun. Ardından Git geçmişinizi kontrol edin — anahtar hiç olsa işlenebilirse, silseniz bile depo geçmişinizde hala vardır. Açığa çıkmış herhangi bir anahtarı yeniden oluşturun (döndürün), hatta kısaca bile olsa.

Düzeltme süresi: 15–30 dakika.

Hata 2: Satır Düzeyinde Güvenlik Olmayan Supabase Tabloları

Nasıl olur: Yapay zeka Supabase tablo oluşturma sorguları ve CRUD işlemleri oluşturur, ancak Satır Düzeyinde Güvenliği (RLS) etkinleştirmez. Varsayılan olarak, RLS devre dışı bırakılan Supabase tabloları, proje URL'niz ve anon anahtarınız — her ikisi de herkese açık (ve öyle olmalıdır) — olan herkes tarafından tamamen erişilebilir.

Neden tehlikelidir: RLS olmadan, Kullanıcı A, Kullanıcı B'nin verilerine sorgu yapabilir. Tarayıcı konsolundan basit bir fetch çağrısı her tablodan her satırı çekebilir. Tüm veritabanınız etkili bir şekilde herkese açıktır.

Nasıl tanınır: Supabase panosu → Tablo Editörü'ne gidin. Herhangi bir tablo "RLS Devre Dışı" gösteriyorsa, bu sorunu yaşıyorsunuz. Ayrıca istemci tarafı kodunuzun anon anahtarı yerine service_role anahtarını kullanıp kullanmadığını kontrol edin — bu daha da kötüdür.

Çözüm: Her tabloda RLS'yi etkinleştirin. Ardından uygulamanızın erişim modellerine eşleşen politikalar oluşturun. En yaygın politika: kullanıcılar yalnızca auth.uid() = user_id olduğu satırları SELECT, INSERT, UPDATE ve DELETE yapabilir. Bir kullanıcı olarak oturum açarak ve başka bir kullanıcının verilerine Supabase REST API aracılığıyla erişmeyi deneyerek test edin.

Düzeltme süresi: Tablo sayısına bağlı olarak 30–60 dakika.

Bundan değer alıyor musunuz? Yapay zeka araçları, iş akışları ve pratik güvenlik kılavuzları hakkında haftada bir derinlemesine yayın yapıyoruz. İlk önce bilenler arasına katılın →

Hata 3: Formlar veya API Yollarında Giriş Doğrulaması Yok

Nasıl olur: Yapay zeka herhangi bir girişi kabul eden formlar ve gelen verilere güvenen API yolları oluşturur. Form HTML'de bir "required" özniteliğine sahiptir, ancak sunucu tarafında doğrulama yoktur. Birisi formu tamamen atlayıp istediği yükle doğrudan bir API isteği göndererek yanı sıra.

Neden tehlikelidir: Sunucu tarafında doğrulama olmadan, saldırganlar komut dosyalarını veritabanınıza (saklı XSS) enjekte edebilir, sunucunuzu çökertecek boyut aşan yükleri gönderebilir veya uygulamanızın mantığını bozacak veri gönderebilir (negatif fiyat veya SQL içeren e-posta alanı gibi).

Nasıl tanınır: Kod tabanınızda herhangi bir API yolunu veya sunucu eylemini açın. Her alanın şeklini, türünü ve uzunluğunu kontrol etmeden req.body veya form verilerini kullanıyorsa, bu sorunu yaşıyorsunuz.

Çözüm: Bir şema doğrulama kitaplığını kullanarak her bitiş noktasına sunucu tarafında doğrulama ekleyin. Zod, TypeScript projeleri için standarttır:

TypeScript
import { z } from 'zod';

const taskSchema = z.object({
  title: z.string().min(1).max(200),
  description: z.string().max(2000).optional(),
  priority: z.enum(['low', 'medium', 'high']),
});

// API yolunuzda:
const parsed = taskSchema.safeParse(req.body);
if (!parsed.success) {
  return Response.json({ error: parsed.error }, { status: 400 });
}

HTML olarak renderlenen herhangi bir alan (yorumlar, açıklamalar, biyografiler) için, görüntülemeden önce DOMPurify ile çıkışı ayrıca temizleyin.

Düzeltme süresi: 30–60 dakika.

Hata 4: API Uç Noktalarında Hız Sınırlaması Yok

Nasıl olur: Yapay zeka siz açık olarak talep etmediğiniz sürece hız sınırlaması hiçbir zaman eklemez. Uygulamanızın sunduğu her API yolu, komut dosyası olan herkes tarafından saniyede binlerce kez çalıştırılabilir.

Neden tehlikelidir: Hız sınırlaması olmadan, birisi oturum açma bitiş noktanıza kaba kuvvet yapabilir, liste uç noktalarına tekrar tekrar çalıştırılarak veritabanınızı kazıyabilir, sunucunuzu (hizmet reddi) överlebilir veya bitiş noktalarınız OpenAI veya Stripe gibi harici hizmetleri çağırıyorsa API kötanızı yakabilir.

Nasıl tanınır: API yollarınızdan hiçbiri son zamanlarda tek bir IP veya kullanıcı tarafından kaç istekte bulunulduğunu kontrol etmiyorsa, hiçbir hız sınırlamanız yoktur.

Çözüm: Vercel'de barındırılan uygulamalar için en basit yaklaşım, geliştirme için bellek içi bir hız sınırlayıcı ve üretim için Redis tabanlı bir hız sınırlayıcıdır. Vercel's Edge Middleware, temel hız sınırlamayı işleyebilir. Upstash Redis (ücretsiz katman) ve @upstash/ratelimit az miktarda kodla üretim sınıfı hız sınırlaması sağlar.

Makul bir başlangıç noktası: kimliği doğrulanmış kullanıcılar için dakikada 60 istek, kimliği doğrulanmamış kullanıcılar için dakikada 20 istek ve oturum açma/kayıt uç noktaları için dakikada 5 istek (kaba kuvveti önlemek için).

Düzeltme süresi: 20–45 dakika.

Hata 5: Korumalı Sayfalarda ve API'lerde Eksik Kimlik Doğrulama Kontrolleri

Nasıl olur: Yapay zeka güzel bir pano sayfası ve kullanıcı verilerini döndüren API yolları oluşturur, ancak kullanıcının gerçekten oturum açıp açmadığını doğrulamak için ara katman yazılımı eklemez. Sayfa "çalışır" çünkü geliştirme sırasında daima oturum açtınız. Üretimde, birisi oturum açmadan doğrudan pano URL'sine erişebilir veya API bitiş noktasını çalıştırıp veri geri alabilir.

Neden tehlikelidir: Korumalı sayfalarına kimliği doğrulanmamış erişim, herkesin sadece URL'yi tahmin ederek kullanıcı panolarını, yönetici panellerini veya özel verileri görebileceği anlamına gelir. Korumasız API yolları, Postman veya curl gibi herhangi bir aracın kimlik bilgileri olmadan veri çekebileceği anlamına gelir.

Nasıl tanınır: Bir gizli tarayıcı penceresinde (oturum açmamış) açın ve doğrudan pano, ayarlar veya yönetici URL'lerine gidin. Oturum açma sayfasına yönlendirilmeden hiçbir içeriği görebiliyorsanız, bu sorunu yaşıyorsunuz. Ardından API yollarınızı doğrudan çalıştırmayı deneyin — geçerli bir oturum çerezi veya kimlik doğrulama belirteci olmadan veri döndürüyorlarsa, bunlar da korumasızdır.

Çözüm: Her korumalı yoldan önce çalıştırılan bir kimlik doğrulama ara katman yazılımı ekleyin. Next.js App Router'da, proje kökünüzde bir middleware.ts oluşturun:

TypeScript
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  const session = request.cookies.get('session');
  if (!session) {
    return NextResponse.redirect(new URL('/login', request.url));
  }
  return NextResponse.next();
}

export const config = {
  matcher: ['/dashboard/:path*', '/settings/:path*', '/api/protected/:path*'],
};

Kimlik doğrulama gerektirmesi gereken her yolu kapsayacak şekilde matçeri uyarlayın. Uyguldıktan sonra gizli modda test edin.

Düzeltme süresi: 15–30 dakika.

Bunları Gelecek Projelerde Nasıl Önlerim

Desen açıktır: Yapay zeka işlevsel olarak çalışan ancak güvenliği atladığı kod oluşturur çünkü bunu talep etmediniz. Çözüm bunu başından talep etmektir.

Herhangi bir vibe-coded projesinin ilk isteminizin sonuna bunu ekleyin:

İstem parçacığı
GÜVENLİK GEREKSİNİMLERİ:
- Tüm gizli anahtarlar ortam değişkenlerinde (hiçbir zaman sabit kodlanmamış)
- Supabase RLS tüm tablolarda kullanıcı başına politikalarla etkinleştirildi
- Her API yolunda sunucu tarafından doğrulama (Zod kullanın)
- Tüm herkese açık uç noktaları hız sınırlaması
- Tüm korumalı yollarda kimlik doğrulama ara katman yazılımı
- İstemci tarafı kodunda hizmet rolü anahtarı yok

Bu her şeyi yakalamayacak, ancak beş en yaygın güvenlik açığını ilk geçişte kaldırır ve daha sonra temizleme gerektirmek yerine.

Baştan başlayarak yapay zekadan daha güvenli kod üretecek istemler yazma konusunda daha iyi olmak istiyorsanız, ücretsiz istem optimizatörümüz talimatlarınızı yapılandırmanıza yardımcı olabilir. Ve eksiksiz bir güvenlik gözden geçirmesi için adım adım kılavuzumuza bakın: Müşterilere Vermeden Önce Vibe-Coded Uygulamayı Nasıl Güvenliğini Sağlayacak.

Bunun her hafta yaptığımız şey. Yapay zeka araçları, iş akışları ve dürüst görüşler hakkında bir derinlemesine — hype yok, dolgu yok. Bize katılın →

İfşa: Bu makaledeki bazı bağlantılar bağlı program bağlantılarıdır. Yalnızca kişisel olarak test ettiğimiz ve düzenli olarak kullandığımız araçları öneririz. Bkz. tam açıklama politikamız.