Tüm Yazılar
Güvenlik6 dk

React ve Next.js Güvenlik Açıkları

#React#Next.js#Security#XSS

React ve Next.js Güvenlik Açıkları

Modern web uygulamalarında güvenlik kritik öneme sahiptir. İşte React ve Next.js'te dikkat edilmesi gereken güvenlik açıkları ve çözümleri:

1. XSS (Cross-Site Scripting)

Tehlikeli Kullanım:

// ❌ Tehlikeli - XSS açığı! function UserComment({ comment }) { return <div dangerouslySetInnerHTML={{ __html: comment }} />; }

Güvenli Kullanım:

// ✅ Güvenli - React otomatik escape eder function UserComment({ comment }) { return <div>{comment}</div>; } // veya DOMPurify ile temizle import DOMPurify from 'dompurify'; function SafeHTML({ html }) { return <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(html) }} />; }

2. API Route Güvenliği (Next.js)

Tehlikeli:

// ❌ Kimlik doğrulama yok! export async function POST(req: Request) { const data = await req.json(); await db.users.delete(data.userId); return Response.json({ success: true }); }

Güvenli:

// ✅ Kimlik doğrulama ve yetkilendirme export async function POST(req: Request) { const session = await getServerSession(); if (!session) { return Response.json({ error: 'Unauthorized' }, { status: 401 }); } const data = await req.json(); // Input validation if (!data.userId || typeof data.userId !== 'string') { return Response.json({ error: 'Invalid input' }, { status: 400 }); } await db.users.delete(data.userId); return Response.json({ success: true }); }

3. Environment Variables

Tehlikeli:

// ❌ API anahtarını client'a gönderme! const API_KEY = process.env.SECRET_API_KEY; function App() { fetch(`/api?key=${API_KEY}`); // Client'ta görünür! }

Güvenli:

// ✅ Server-side kullan // app/api/data/route.ts export async function GET() { const apiKey = process.env.SECRET_API_KEY; // Sadece server'da const data = await fetch('https://api.example.com', { headers: { 'Authorization': `Bearer ${apiKey}` } }); return Response.json(data); }

Not: Next.js'te NEXT_PUBLIC_ prefix'i ile başlayan değişkenler client'a gönderilir!

4. CSRF (Cross-Site Request Forgery)

// ✅ CSRF token kullan import { csrf } from '@/lib/csrf'; export async function POST(req: Request) { const isValid = await csrf.verify(req); if (!isValid) { return Response.json({ error: 'Invalid CSRF token' }, { status: 403 }); } // İşlemi yap... }

5. SQL Injection

Tehlikeli:

// ❌ Raw SQL query const userId = req.query.id; const user = await db.raw(`SELECT * FROM users WHERE id = ${userId}`);

Güvenli:

// ✅ Parameterized query veya ORM kullan const userId = req.query.id; const user = await db.users.findUnique({ where: { id: userId } });

Güvenlik Kontrol Listesi

  • ✅ Kullanıcı inputlarını her zaman validate et
  • ✅ API route'larında kimlik doğrulama kullan
  • ✅ Hassas verileri client'a gönderme
  • ✅ HTTPS kullan (production'da zorunlu)
  • ✅ Content Security Policy (CSP) header'ları ekle
  • ✅ Rate limiting uygula
  • ✅ Dependencies'i güncel tut (npm audit)

Güvenlik, sürekli dikkat gerektiren bir konudur. Bu temel önlemlerle uygulamanızı daha güvenli hale getirebilirsiniz!

Benzer Yazıları Okumak İster misiniz?

Daha fazla yazı için blog sayfasına göz atın.

Tüm Yazılar