Güvenlik: JWT vs Sanctum

Profesyoneller Ne Kullanıyor? Hangisi Daha Güvenli?

2025'te JWT Güvenlik Açıkları

2025 yılında JWT implementasyonlarında 6 kritik CVE açıklandı. Milyonlarca kullanıcıyı etkileyen bu açıklar, JWT'nin dikkatli kullanılması gerektiğini gösteriyor.

CVE-2025-4692

Algorithm confusion - yetkisiz token oluşturma

CVE-2025-30144

Signature verification bypass

CVE-2025-27371

ECDSA key recovery - token forgery

Güvenlik Karşılaştırması

Güvenlik Kriteri Sanctum JWT
Token Çalınırsa Anında iptal edilir Süresi dolana kadar geçerli
Token Revocation DB'den sil = bitti Blacklist gerekli
Bilinen Saldırılar Az Çok (algorithm confusion, none alg, vb.)
Oturum Kontrolü Her istekte DB kontrolü Stateless (kontrol yok)
Çoklu Cihaz Yönetimi Kolay (her token DB'de) Zor (ekstra mekanizma lazım)
"Tüm Cihazlardan Çıkış" 1 sorgu ile İmkansız (blacklist lazım)
GÜVENLİK SKORU ⭐⭐⭐⭐⭐ ⭐⭐⭐

JWT'ye Yapılan Popüler Saldırılar

1. Algorithm Confusion Attack EN TEHLİKELİ

Sunucu RS256 (asymmetric) kullanıyorken, saldırgan HS256 (symmetric) ile imzalanmış token gönderir. Public key'i secret olarak kullanarak token'ı forge eder.

Header: {"alg": "HS256"} → Public key ile imzala → Sunucu kabul eder!

2. "None" Algorithm Attack

Token header'ında "alg": "none" yazılır. Bazı kütüphaneler bunu kabul eder ve imza kontrolü yapmaz.

Header: {"alg": "none"} → İmza yok → Sunucu kabul eder!

3. Weak Secret Brute Force

HMAC tabanlı JWT'lerde secret zayıfsa (örn: "secret", "password", "123456"), saldırgan brute force ile secret'ı bulur ve istediği token'ı üretir.

hashcat -m 16500 jwt.txt wordlist.txt → Secret bulundu: "admin123"

4. Token Theft (XSS/MITM)

Token çalındığında, süresi dolana kadar kullanılabilir. Sanctum'da anında iptal edilir, JWT'de imkansız (blacklist olmadan).

Profesyoneller Ne Kullanıyor?

Netflix

260M+ kullanıcı, günde 1 milyar+ API isteği

OAuth 2.0 + JWT hibrit

Kısa süreli access token (15 dk)

Refresh token rotasyonu

Device fingerprinting

Spotify

Authorization Code Flow

OAuth 2.0 (PKCE)

Access token: 1 saat

Refresh token: uzun süreli

Scope-based permissions

Uber

Real-time requirements

OAuth 2.0 + JWT

Microservices arası JWT

Location-based validation

Rate limiting

Laravel Resmi Önerisi

Taylor Otwell'in tercihi

Sanctum - SPA & Mobil için

Passport - OAuth2 gerekirse

JWT önerilmiyor (3rd party)

Ortak Nokta

Büyük şirketler saf JWT kullanmıyor. Hepsi şu kombinasyonu kullanıyor:

  • OAuth 2.0 akışı (authorization)
  • JWT (token formatı olarak)
  • Kısa süreli access token (5-60 dk)
  • Refresh token (DB'de saklanır - revoke için)
  • Token rotation & fingerprinting

Sonuç: Senin İçin En İyisi

Sanctum

+ Tenant Migration

Neden Sanctum?

  • Laravel resmi çözümü
  • Token revocation kolay
  • Çoklu cihaz yönetimi hazır
  • Bilinen saldırılara karşı güvenli
  • "Tüm cihazlardan çıkış" 1 sorgu

Migration Derdi?

  • Bir kere yapılır
  • Yeni tenant'larda otomatik
  • Güvenlik > Kolaylık

Yapılacaklar:

  1. 1 personal_access_tokens migration'ını tenant klasörüne kopyala
  2. 2 php artisan tenants:migrate çalıştır (mevcut tenant'lara ekler)
  3. 3 Yeni tenant oluşturduğunda tablo otomatik gelir
  4. 4 Bitti! Mevcut AuthController zaten Sanctum kullanıyor, değişiklik yok

JWT Neden Değil?

  • 2025'te 6 kritik CVE
  • Token çalınırsa iptal edemezsin
  • Cihaz yönetimi için ekstra kod
  • Laravel resmi değil
  • Algorithm confusion riski

Sanctum Neden Evet?

  • Laravel resmi, Taylor Otwell güvencesi
  • Token anında iptal edilir
  • Cihaz yönetimi hazır
  • Zaten kurulu, sadece tablo lazım
  • Bilinen saldırılara dayanıklı

Kaynaklar

17 Şubat 2026 • Tuufi.com