logo 1
  • Anasayfa
  • Nedir?
  • Nasıl Yapılır?
  • Seo
  • WordPress
  • Kategoriler
    • Gündem
    • Kitap
    • Yazılım
    • WordPress Tema
    • Siber Güvenlik
    • Teknoloji
Reading: SSR (Sunucu Taraflı Render) Kullanan Next.js Uygulamalarında XSS Tehlikesi
Share
Site Kur
Taha Mumcu Kişisel BlogTaha Mumcu Kişisel Blog
Font ResizerAa
  • Complaint
  • Advertise
Search
  • Homepage
  • Features
    • Post Headers
    • Layout
  • Categories
    • Lifestyle
    • Wellness
    • Healthy
    • Nutrition
  • More Foxiz
    • Complaint
    • Sitemap
    • Advertise
  • Contacts
Follow US
Copyright © 2014-2023 Ruby Theme Ltd. All Rights Reserved.
Taha Mumcu Kişisel Blog > Blog > Yazılım > SSR (Sunucu Taraflı Render) Kullanan Next.js Uygulamalarında XSS Tehlikesi
Yazılım

SSR (Sunucu Taraflı Render) Kullanan Next.js Uygulamalarında XSS Tehlikesi

i18n nextjs
Taha Mumcu
By Taha Mumcu
Last updated: 29 Mart 2025
4 Min Read
SHARE

Next.js’in en güçlü özelliklerinden biri olan SSR (Sunucu Taraflı Render), SEO uyumluluğu ve ilk sayfa yükleme hızı açısından büyük avantajlar sağlar. Ancak bu avantaj, geliştiriciler için yeni güvenlik sorumluluklarını da beraberinde getirir. Özellikle XSS (Cross-Site Scripting) gibi saldırılar, SSR destekli Next.js uygulamalarında dikkatli olunmazsa ciddi açıklara neden olabilir. Bu yazımızda SSR ile çalışan Next.js projelerinde XSS risklerini detaylandırıyor ve alınması gereken önlemleri adım adım inceliyoruz.

Başlıklar
  • 📌 XSS Nedir?
  • 🔄 SSR ile XSS Nasıl Ortaya Çıkar?
    • 🔥 Tehlikeli Örnek:
  • ⚠️ SSR’de XSS Riski Hangi Durumlarda Yükselir?
  • ✅ Nasıl Korunuruz?
    • 1️⃣ dangerouslySetInnerHTML’den Uzak Durun
    • 2️⃣ Sunucu Tarafındaki Verileri Temizleyin
    • 3️⃣ React Bileşenleriyle Render Edin, HTML ile Değil
    • 4️⃣ Query Parametreleri Üzerinde Kontrol Sağlayın
    • 5️⃣ Content-Security-Policy (CSP) Uygulayın
  • 🛡️ Ekstra Güvenlik Tavsiyeleri
  • 🔍 SSR Güçlüdür Ama Sorumluluk İster

📌 XSS Nedir?

XSS (Cross-Site Scripting), kötü niyetli bir kullanıcının web sayfasına zararlı JavaScript kodu enjekte etmesidir. Bu kodlar sayesinde:

  • Kullanıcının oturum bilgileri çalınabilir,
  • Sayfa içeriği değiştirilebilir,
  • Arka planda zararlı yönlendirmeler yapılabilir,
  • Kullanıcıların girdiği formlar izlenebilir.

React tabanlı uygulamalar genelde bu saldırılara karşı korumalıdır; fakat SSR kullanıldığında işin rengi değişebilir.


🔄 SSR ile XSS Nasıl Ortaya Çıkar?

Next.js’te getServerSideProps gibi SSR fonksiyonları sayesinde sayfalar sunucuda hazırlanır ve istemciye HTML olarak döner. Eğer bu süreçte, kullanıcılardan gelen içerikler yeterince filtrelenmeden HTML’e gömülürse XSS riski doğar.

🔥 Tehlikeli Örnek:

jsxKopyalaDüzenle// getServerSideProps içinde döndürülen kullanıcı verisi:
return {
  props: {
    comment: '<script>alert("XSS!");</script>',
  },
};

// Component içinde:
<div dangerouslySetInnerHTML={{ __html: comment }} />

Bu kod ile kullanıcıdan gelen bir yorum, doğrudan HTML olarak sayfaya basılırsa; zararlı JavaScript kodları da istemci tarafında çalıştırılabilir.


⚠️ SSR’de XSS Riski Hangi Durumlarda Yükselir?

  • Kullanıcı verileri doğrudan HTML olarak render edildiğinde
  • dangerouslySetInnerHTML sık ve kontrolsüz kullanıldığında
  • URL query parametreleri içerik üretiminde kontrolsüz kullanıldığında
  • Üçüncü parti veri kaynakları (örneğin CMS, API) filtrelenmeden frontend’e yansıtıldığında

✅ Nasıl Korunuruz?

1️⃣ dangerouslySetInnerHTML’den Uzak Durun

Bu özellik yalnızca zorunlu hallerde kullanılmalı. Eğer illa kullanılacaksa içerik, zararlı kodlardan sanitize (temizlenmiş) olmalı.

🔧 Önerilen kütüphane:
👉 DOMPurify

jsKopyalaDüzenleimport DOMPurify from 'dompurify';

<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(comment) }} />

2️⃣ Sunucu Tarafındaki Verileri Temizleyin

getServerSideProps içinde kullanıcıdan gelen inputlar, veri tabanından çekilen içerikler mutlaka filtrelenmeli.

jsKopyalaDüzenleconst cleanData = sanitizeHtml(dbResponse.comment); // sanitizeHtml örneği
return {
  props: { comment: cleanData },
};

3️⃣ React Bileşenleriyle Render Edin, HTML ile Değil

Eğer mümkünse HTML string kullanmak yerine JSX içinde veri render edin. Örneğin:

jsxKopyalaDüzenle<p>{comment}</p> // Güvenli çünkü React escape eder

4️⃣ Query Parametreleri Üzerinde Kontrol Sağlayın

Kötü niyetli kullanıcılar, URL query’lerine zararlı kodlar ekleyebilir. SSR fonksiyonlarında bu parametreler asla doğrudan sayfaya aktarılmamalı.

jsKopyalaDüzenle// getServerSideProps
const { query } = context;
const searchTerm = sanitizeInput(query.q);

5️⃣ Content-Security-Policy (CSP) Uygulayın

CSP, tarayıcının yalnızca izin verilen kaynaklardan kod çalıştırmasına olanak tanır. Inline script’lerin çalışmasını engelleyerek XSS riskini azaltır.

jsKopyalaDüzenle// next.config.js
headers: [
  {
    key: 'Content-Security-Policy',
    value: "default-src 'self'; script-src 'self';",
  },
],

🛡️ Ekstra Güvenlik Tavsiyeleri

  • Form inputları için karakter filtreleme uygulayın.
  • HTML encode işlemlerini backend tarafında yapın.
  • SSR kullandığınız sayfalarda verileri mutlaka kontrol edin ve sınırlayın.
  • Script tag’leri, iframe’ler, event handler’lar (onerror, onclick) içeriklerde yasaklanmalı.

🔍 SSR Güçlüdür Ama Sorumluluk İster

Sunucu taraflı render işlemi, performans ve SEO açısından vazgeçilmezdir. Ancak kullanıcıdan alınan verilerin istemciye doğrudan aktarılması büyük bir güvenlik riskidir. Bu nedenle:

  • Temiz ve güvenli kod yazımı,
  • Doğru araçlarla veri filtreleme,
  • Next.js güvenlik konfigürasyonlarının aktif kullanımı,
    SSR projelerinizi saldırılara karşı dayanıklı hale getirir.

Unutmayın, güvenli bir SSR mimarisi, kullanıcılarınızın ve verilerinizin güvenliği için en önemli adımdır.

Share This Article
Facebook Copy Link Print
ByTaha Mumcu
Follow:
Ben Taha Mumcu, Bilişim sektöründe uzun süreden beri tecrübe edinerek bir yerlere gelmek için çalışmalarına devam eden ve sektörü yakından takip ederek hiç bir veriden geri kalmayan, girişimci ruhu ile tüm işlere elinden geldiğinde çalışma yapan bir girişimciyim. Henüz genç yaşta birçok tecrübeye ulaşan ve koyulan engelleri aşarak bir yerlere gelmek için çaba göstermekten çekinmiyorum.
Previous Article react localization i18n Next.js Projelerinde Sık Karşılaşılan Güvenlik Açıkları ve Korunma Yöntemleri
Next Article 05 Next js Vercel MDX Tailwind@2x Next.js Uygulamanız Güvende mi? Güvenlik Testleri ve Hardening Adımları
Son Yazılar
image
İstanbul İç Mimarlık Ofisleri İle Yaşam Alanlarını Yeniden Tasarlayın
10 Mart 2026
image
Deprem Konteyneri Acil Durumlarda Güvenli Barınma Çözümü Sunar
10 Mart 2026
kdogrselleri (49)
Google Ads Kampanyalarında Başarıyı Etkileyen Faktörler
11 Şubat 2026
iso 9001.jpg (2)
Meb 9001 Belgesi İçin Öğrenci Kayıt ve Takip Sistemi
8 Şubat 2026
Image fx (23) (1)
Hızlı Okuma Eğitimleri Hangi Yaş Grupları İçin Uygundur?
7 Şubat 2026
Popüler Yazılar
sebeke sorunlari
Şebeke Problemi ,Telefon Çekmiyor Sorunlarının Çözümü
3 Ocak 2023
bimber
WordPress Viral Tema – Bimber
19 Kasım 2020
blognasilacilir
Kişisel Blog Nasıl Açılır? Kişisel Blog Nedir?
5 Ocak 2021
laptop 3706810 1280
En İyi Hosting Firmaları 2023
14 Ekim 2023
Binance vs OKX kripto borsasında kim önde
21 Ekim 2025

You Might Also Like

photo 1599507593362 50fa53ed1b40
Yazılım

PHP ile RDM Bağlantısı ve SSH Komutu Çalıştırma

0 Min Read
403 error
Yazılım

403 Forbidden Hatası Nedir? Çözüm Önerileri

2 Min Read
tahamumcu phpdersleri1
Yazılım

Programcılığın Temeli ve Algoritma

1 Min Read
webgelistirme
Yazılım

Web Geliştirme Dünyasında Son Değişiklikler ve Etkileri

1 Min Read
logo 1

Bilişim sektöründe uzun süreden beri tecrübe edinerek bir yerlere gelmek için çalışmalarına devam eden ve sektörü yakından takip ederek hiç bir veriden geri kalmayan, girişimci ruhu ile tüm işlere elinden geldiğinde çalışma yapan bir girişimciyim.

Başlıklar

  • Gündem
  • Teknoloji
  • Karşılaştırma
  • WordPress
  • Seo
  • Internet
  • Nasıl Yapılır?
  • Nedir?

Sponsor Bağlantılar

  • Kocaeli Web Tasarım
  • VDS Satın Al
  • Hosting

Web Tasarım Teklifi Alın

Kocaeli Dijital ile tanışın ve hemen web sitesi veya seo teklifi alın!
Ziyaret Et
Welcome Back!

Sign in to your account

Username or Email Address
Password

Lost your password?