Hoşgeldin Misafir

Yasar7880

İzmir
1 Mar 2024
840 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
1*7h44drEDGfRQKQ1vun5lhw.png


Merhaba Turkhacks okurları ve yazılım sektörüne gönül vermiş geliştiriciler. REST API geliştirmeye başlayan çoğu geliştirici için ilk büyük adımlardan biri kullanıcı doğrulama sistemini kurmaktır.

Başlangıçta işler oldukça basit görünür.
Kullanıcı giriş yapar, sistem bir JWT üretir ve sonraki isteklerde bu token kullanılır.

Her şey çalışıyordur.

Fakat bir süre sonra şu sorular ortaya çıkmaya başlar:

  • Token süresi ne kadar olmalı?
  • JWT içerisine hangi bilgiler yazılmalı?
  • Refresh Token gerekli mi?
  • Secret Key nasıl saklanmalı?
  • JWT çalınırsa ne olur?
İşte JWT kullanan projeler ile güvenli JWT kullanan projeler arasındaki fark burada ortaya çıkar.
Çünkü güvenlik çoğu zaman bir teknolojiyi kullanmakla değil, onu doğru kullanmakla ilgilidir.


JWT Güvenliği Neden Bu Kadar Önemli?

JWT'nin en büyük avantajı stateless olmasıdır.
Sunucu tarafında oturum tutulmaz.

Bu sayede:

  • Performans artar
  • Ölçekleme kolaylaşır
  • Mikroservis yapıları daha rahat yönetilir
Ancak aynı avantaj beraberinde bir sorumluluk da getirir.
Çünkü geçerli bir token ele geçirildiğinde sistem onu gerçek kullanıcı gibi görebilir.
Bu yüzden JWT sistemleri tasarlanırken bazı temel kurallara dikkat etmek gerekir.


JWT İçerisinde Hassas Veri Tutmayın

Yeni başlayan geliştiricilerin yaptığı en yaygın hatalardan biri JWT içerisine gereğinden fazla bilgi koymaktır.

Örneğin:

Kod:
{

  "username":"admin",
  "password":"123456"
}

Böyle bir kullanım kesinlikle doğru değildir.

JWT şifrelenmiş değildir.
Sadece imzalanmıştır.
Bu nedenle token içeriği okunabilir.
JWT içerisinde yalnızca gerçekten gerekli bilgiler bulunmalıdır.

Örneğin:

Kod:
{

  "userId":15,
  "role":"ADMIN"
}

Bu yaklaşım çok daha güvenlidir.


Token Sürelerini Gereğinden Fazla Uzatmayın
Bazı projelerde token sürelerinin aylarca hatta yıllarca geçerli bırakıldığı görülebiliyor.
Bu ciddi bir güvenlik riskidir.

Aşağıdaki tablo genel bir fikir verebilir:

Kullanım Türü
Önerilen Süre
Access Token15-60 dakika
Refresh Token7-30 gün
Mobil uygulama
İhtiyaca göre değişebilir
Token süresi uzadıkça ele geçirilmesi durumunda oluşabilecek risk de artar.


Refresh Token Kullanmayı Düşünün

JWT kullanan projelerde sık karşılaşılan problemlerden biri kullanıcı deneyimidir.
Örneğin Access Token süresini 15 dakika yaptınız.
Kullanıcı her 15 dakikada bir tekrar giriş yapmak istemeyecektir.
Bu noktada Refresh Token devreye girer.

Mantık oldukça basittir:
Access Token Süresi Doldu


Refresh Token Kontrol Edildi

Yeni Access Token Üretildi


Bu yapı hem güvenliği hem de kullanıcı deneyimini dengeler.


Secret Key'i Kodun İçine Yazmayın

JWT sistemlerinin güvenliği büyük ölçüde kullanılan secret key'e bağlıdır.
Ancak birçok projede şu tarz kullanım görmek mümkündür:

Kod:
String secret =

"123456789";

Bu yaklaşım geliştirme ortamında çalışabilir.
Fakat gerçek sistemlerde ciddi risk oluşturur.

Daha doğru yöntemler:

  • Environment Variables
  • Vault sistemleri
  • Secret Manager servisleri
Bu sayede anahtar bilgileri kod deposunda tutulmaz.


HTTPS Kullanmadan JWT Kullanmayın

Bu madde bazen gözden kaçabiliyor.
JWT ne kadar güvenli olursa olsun, HTTP üzerinden taşınıyorsa ciddi risk altındadır.

Çünkü ağ trafiğini dinleyen biri token'ı ele geçirebilir.

Bu nedenle:

ProtokolGüvenlik
HTTPRiskli
HTTPS
Güvenli
Modern uygulamalarda HTTPS artık bir tercih değil, zorunluluktur.


Logout Mekanizmasını Planlayın

JWT kullanan sistemlerde logout işlemi klasik session sistemlerinden biraz farklıdır.

Çünkü sunucu tarafında aktif bir oturum bulunmaz.

Bu nedenle:

  • Token blacklist
  • Refresh token iptali
  • Token versiyonlama
gibi yöntemlerden biri tercih edilmelidir.
Aksi halde kullanıcı çıkış yapmış olsa bile token süresi dolana kadar kullanılmaya devam edebilir.


Yetkilendirmeyi Sadece Frontend'e Bırakmayın

Bazen geliştiriciler yalnızca arayüz tarafında kontrol yapmanın yeterli olduğunu düşünebiliyor.

Örneğin:

Admin Butonu Gizlendi
Bu güvenlik değildir.
Sadece kullanıcı deneyimidir.
Gerçek kontrol mutlaka backend tarafında yapılmalıdır.

Örneğin:

ROLE_ADMIN
yetkisi olmayan kullanıcı ilgili endpoint'e erişememelidir.


Gereksiz Bilgileri Loglamayın

Log sistemleri hata ayıklamak için çok değerlidir.

Ancak bazı bilgiler loglara yazılmamalıdır.


Özellikle:

  • JWT tokenları
  • Şifreler
  • Refresh tokenlar
  • Güvenlik anahtarları
log dosyalarında bulunmamalıdır.

Aksi halde log sistemi yeni bir güvenlik açığına dönüşebilir.


Rate Limiting Kullanın

JWT kullanıyor olmanız saldırı riskini tamamen ortadan kaldırmaz.
Özellikle login endpoint'leri hedef alınabilir.
Bu nedenle belirli bir süre içerisinde yapılabilecek istek sayısını sınırlamak mantıklıdır.

Örneğin:

İşlemLimit
LoginDakikada 5
Şifre sıfırlamaDakikada 3
Kayıt işlemi
Dakikada 10

Bu yaklaşım brute force saldırılarına karşı önemli koruma sağlar.


Algoritma Seçimine Dikkat Edin

JWT oluşturulurken kullanılan imzalama algoritması da önemlidir.

En sık kullanılan seçenekler:

AlgoritmaKullanım
HS256Yaygın
RS256Kurumsal sistemler
ES256
Daha gelişmiş senaryolar
Küçük ve orta ölçekli projelerde HS256 çoğu zaman yeterlidir.

Kurumsal sistemlerde ise RS256 daha sık tercih edilir.


En Sık Yapılan JWT Hataları

Gerçek projelerde tekrar tekrar karşılaşılan bazı hatalar vardır.

  • Süresiz token oluşturmak
  • Secret key'i GitHub'a yüklemek
  • HTTP kullanmak
  • WT içine hassas veri koymak
  • Logout sürecini düşünmemek
  • Refresh Token kullanmamak

Bu hataların çoğu sistem çalışırken fark edilmez.
Genellikle güvenlik testi veya saldırı sonrasında ortaya çıkar.


Sevgili Dostlar JWT, REST API güvenliği için günümüzde en yaygın kullanılan yöntemlerden biri haline gelmiş durumda. Ancak JWT kullanıyor olmak tek başına sistemi güvenli hale getirmez. Turkhacks yazılım ekibimizide sıklıkla kullandığı Gerçek güvenlik; doğru token süreleri belirlemekten, secret key yönetimine, HTTPS kullanımından yetkilendirme kontrollerine kadar birçok detayın birlikte düşünülmesiyle sağlanır.

Başarılı projelerde JWT yalnızca bir kimlik doğrulama mekanizması değildir. Aynı zamanda sistemin genel güvenlik stratejisinin önemli bir parçasıdır. Bu nedenle JWT'yi öğrenirken sadece nasıl üretildiğine değil, nasıl korunacağına da odaklanmak uzun vadede çok daha değerli olacaktır. Bir dahaki makalemizde görüşüne kadar mavi ekraansız ve sorunsuz sistemlerde çalışmanız dileği ile hoşçakalın



9jul8m7.jpeg