React 19 ve Next.js 16 ile olgunlaşan Server Actions özelliğini kullanırken sık yapılan güvenlik hataları ve yetkilendirme (authorization) katmanı tasarımı.
React 19 ve Next.js 16 ile birlikte Server Actions, modern web geliştirmede API endpoint'i yazma ihtiyacını neredeyse tamamen ortadan kaldırdı. Ancak bu kullanım kolaylığı, beraberinde çok kritik güvenlik risklerini de getirdi.
Server Actions Nedir?
En basit anlatımla Server Actions, frontend bileşenlerinden doğrudan sunucu tarafında çalışan fonksiyonları çağırmamızı sağlayan bir yapıdır. Ancak unutmamanız gereken en önemli kural şudur: Her Server Action, arka planda aslında bir HTTP POST endpoint'idir.
Yani kötü niyetli bir kullanıcı, tarayıcıyı devreden çıkararak bu fonksiyona istediği parametrelerle doğrudan istek atabilir.
En Sık Yapılan Güvenlik Hataları
1. Parametrelere Güvenmek
Eğer kullanıcının ID değerini frontend'den parametre olarak gönderiyorsanız, bir saldırgan bu ID'yi değiştirerek başka bir kullanıcının verilerini güncelleyebilir veya silebilir.
❌ Yanlış Yaklaşım:
// sunucu tarafı export async function deletePost(postId: string, userId: string) { // Sadece parametreye güvenerek işlem yapmak güvenlik açığıdır! await prisma.post.delete({ where: { id: postId } }); }
✅ Doğru Yaklaşım:
import { auth } from "@/lib/auth"; export async function deletePost(postId: string) { const session = await auth(); if (!session || !session.user) { throw new Error("Yetkisiz işlem!"); } // userId'yi parametre olarak değil, güvenli session'dan alıyoruz const post = await prisma.post.findUnique({ where: { id: postId } }); if (post.authorId !== session.user.id) { throw new Error("Bu işlemi yapmaya yetkiniz yok!"); } await prisma.post.delete({ where: { id: postId } }); }
2. Zod ile Girdi Doğrulaması (Validation) Yapmamak
Sunucuya gelen her verinin tipini ve formatını doğrulamak zorundasınız. Server Action girişlerini Zod şemaları ile sarmalamak en güvenli yoldur.
import { z } from "zod"; const schema = z.object({ title: z.string().min(3).max(100), content: z.string().min(10) }); export async function createPost(formData: unknown) { const parsed = schema.safeParse(formData); if (!parsed.success) { return { error: "Geçersiz veri biçimi" }; } // ... veritabanı kayıt işlemi }
Özet
Server Actions kullanırken her zaman Zero Trust (Sıfır Güven) prensibini benimseyin. Kullanıcı kimliğini sunucu tarafındaki session'dan doğrulayın, yetkilendirmeyi her action içinde tek tek yapın ve girdi verilerini Zod ile mutlak surette kontrol edin.
İlginizi Çekebilir
Logitech MX Master 3S
Bu blog yazısını yazarken kullandığım ve kod yazmayı keyfe dönüştüren efsanevi mouse. Bilek ağrılarına son!
Yorumlar (2)
Yorum yapmak için giriş yapmalısınız
Topluluğumuzu spam ve botlardan korumak için içeriklere sadece kayıtlı üyeler etkileşimde bulunabilir.
Giriş Yap / Üye OlAffiliate linkinizdeki ürünü ben de kullanıyorum, herkese tavsiye ederim. Elinize sağlık.
Gerçekten çok faydalı bir yazı olmuş, teşekkürler! Özellikle bahsettiğiniz detaylar çok işime yarayacak.