GH GambleHub

JWT: yapı ve güvenlik açıkları

1) JWT nedir ve nerede kullanılır

JWT, 'Base64Url (header) formatında kompakt, bağımsız bir talep konteyneridir. Base64Url (yük). Base64Url (imza) '.

Için kullanılır:
  • JWS (imzalı belirteçler - özgünlük/bütünlük),
  • JWE (şifreli belirteçler - gizlilik),
  • Erişim/kimlik belirteçleri ve hizmetten hizmete kimlik doğrulaması olarak OIDC/OAuth2.

Artıları: özerklik, kaşelenebilirlik, düşük yük. Eksileri: yanlış doğrulama riski, karmaşık hatırlama durumları.

2) JWT yapısı

2. 1 Başlık (JSON)

Minimum: algoritma ve anahtar tanımlayıcı.

json
{ "alg": "ES256", "kid": "jwt-2025-10", "typ": "JWT" }

'alg': imza/şifreleme algoritması (RS256/ES256/PS256/HS256, vb.).
'id': işaretçiden anahtara (JWKS döndürme için).
İsteğe bağlı anahtar kaynaklar: 'jku', 'x5u' (bakınız güvenlik açıkları § 6. 3).

2. 2 Taşıma yükü (JSON)

Standartlaştırılmış pullar:
  • 'iss' (veren), 'aud' (izleyici), 'sub' (konu)
  • 'exp' (son kullanma süresi), 'nbf' (daha önce değil), 'iat' (verilen)
  • 'jti' (belirteç kimliği, iptal edilebilir)
  • Domain-stamps: 'scope/roles', 'tenant', 'kyc _ level', vb.

2. 3 İmza

JWS = 'işareti (base64url (başlık) + "." + base64url (yük), private_key)'

Doğrulama: kesinlikle karşılık gelen genel anahtar ve tam olarak sunucunun beklediği algoritma.

3) Temel kontrol değişmezleri

1. Algoritma, kaynak sunucusunun yapılandırmasıyla (allow-list) sabitlenir ve 'header'ın içeriğine güvenilmez. alg '.
2. Tam bir eşleşme için 'iss've' aud 'işaretleyin,' exp/nbf '- küçük' clock _ skew '(± 30-60'lar) dikkate alınarak.
3. Sadece tek bir anahtar varsa ve rotasyon yoksa'çocuk "olmadan belirteçleri reddet; Aksi takdirde,'çocuk 'talep edin.
4. Nesne düzeyinde yetkilendirme (BOLA-first) olmadan hiçbir damgaya güvenmeyin.
5. Ayrıştırma - kripto doğrulamasından sonra; Kod çözme işleminden önce temel boyut kontrolleri.

4) JWS vs JWE

JWS: imzalı ama okunabilir. Yük PII/sırları koymayın.
JWE: yükü şifreler; Entegrasyon daha zordur, anahtar model kritiktir.
Çoğu API'de, yükte hassas veriler üzerindeki JWS + yasağı yeterlidir.

5) Token yaşam döngüsü

Erişim: Kısa süreli (5-30 dakika).
Yenileme: daha uzun (7-30 gün), kullanımda döndürme (bir kerelik),'kara liste "'jti/sid' tutun.
İptal: TTL ile 'jti' listeleri, opak belirteçler için iç gözlem, olaylar için 'exp' kısaltması.
Anahtar döndürme: Çakışma ile JWKS (eski + yeni), "Anahtar döndürme" makalesine bakın.

6) Sık güvenlik açıkları ve bunların nasıl kapatılacağı

6. 1 'alg = none'/algoritma yerine koyma

Alt satır: Sunucu 'alg' alanına güvenir ve imzasız bir belirteci kabul eder.
Koruma: Sunucudaki algoritmaların sert izin listesi; "Hayır've beklenmedik değerleri reddet.

6. 2 RS256 - HS256 takas (simetrikleştirme)

Alt satır: Bir saldırgan 'alg'i HS256 ile değiştirir ve açık anahtarı HMAC sırrı olarak kullanır.
Koruma: Anahtarı algoritmaya konfigürasyonla bağlayın; Simetrik/asimetrik sağlayıcıları bir 'kedi'de karıştırmayın.

6. 3 Anahtar enjeksiyon ('kid/jku/x5u')

Senaryolar:
  • 'jku', saldırgan tarafından kontrol edilen bir JWKS'ye işaret eder (anahtarını kaydırır).
  • Harici sertifikaların 'x5u'/' x5c' kullanımı.
  • 'id' with/SQL path injection ('.. "/../privkey. pem "'veya' '' 'OR 1 = 1 -"').
Koruma:
  • Silinen 'jku/x5u'yu yoksayın veya katı izin listesi etki alanlarına göre filtreleyin.
  • 'kid' yalnızca yerel dizinde (tablo/önbellek) dosya yolları/SQL bitişikleştirmeleri olmadan anahtar olarak kullanılmalıdır.
  • Güvenilir URL'lerden JWKS yükü, kısa TTL, imza/sabitleme kanalı.

6. 4 HS256 zayıf sırları (kaba kuvvet)

Alt satır: HMAC sırrı kısa/sızdırılmış - imza sahteciliği.
Koruma: Asimetri (RS/ES/PS) veya gizli uzunluk ≥ 256 bit, sırlar - yalnızca KMS'de kullanın.

6. 5 Eksik/geçersiz damgalar

No 'aud'/' iss'/' exp' - belirteci çapraz hizmet edilebilir veya sonsuzdur.
Çok uzun 'exp' - uzlaşma riski.
Koruma: tam işaret kümesi gerektirir, 'exp' kısa, 'nbf'/' iat''clock _ skew'ile doğrulayın.

6. 6 Tekrar ve jeton hırsızlığı

Öz: Bir belirtecin ele geçirilmesi/tekrarlanması (günlüklerde sızıntı, XSS, MitM TLS olmadan).

Koruma:
  • TLS везде, 'Güvenli' + 'HttpOnly' çerezi, SameSite = Lax/Strict.
  • DPoP/PoP (bir istemci anahtarına bir belirteç bağlama) ve/veya ortaklar için mTLS.
  • Kısa 'exp', yenileme-döndürme, cihaz bağlama.

6. 7 XSS/Depolama Sızıntıları

Alt satır: 'LocalStorage'/' sessionStorage'daki JWT depolaması JS tarafından kullanılabilir.
Koruma: erişim belirteçlerini HttpOnly-cookie'de saklayın (çerez modeli mümkünse) + sıkı CSP/Güvenilir Türler.
Çerezsiz SPA için - simgeyi bellekte izole edin, minimum düzeyde yaşayın, XSS'ye karşı koruyun.

6. 8 CSRF

Alt satır: çerez oturumları sırasında, üçüncü taraf bir siteden gelen talepler.
Koruma: SameSite, anti-CSRF belirteçleri (çift gönderme), 'Origin/Referer' kontrolü, Fetch-Metadata filtreleri.

6. 9 Büyük boy/boyut kötüye kullanımı

Gist: büyük yük/başlıklar, ayrıştırmada DoS.
Koruma: başlık/gövde boyut sınırları, erken reddetme 431/413, sabit pul seti.

6. 10 Yerine koyma 'typ'/' cty'

Öz: tür karışıklığı ('typ:' JWT ''), iç içe JOSE nesneleri.
Koruma: Güvenlik için 'typ/cty'yi göz ardı edin, sabit algoritmalara ve marka şemasına güvenin.

7) Token depolama ve transfer

7. 1 Sunucu API'leri (makineden makineye)

mTLS/HMAC, tercihen JWT için asimetri, ağ üzerinden kanallar.
Anahtar deposu - KMS/HSM, zamanlanmış rotasyon, çakışan JWKS.

7. 2 Tarayıcı istemcileri

HttpOnly Güvenli Çerez для erişim/yenileme; Kısa TTL; Güncelleme - sadece HTTPS altında 'SameSite = None'ile' sessiz yenileme 'yoluyla.
Sıkı CSP, Güvenilir Türler, XSS'ye karşı koruma; SPA için - mümkünse, tokeni diskte saklamayın.

8) JWKS, rotasyon ve geri çağırma

JWKS, yetkilendirici tarafından yayınlanır; Tüketiciler 5-15 dakika önbelleğe alır.
Rotasyon planı: yeni bir'çocuk 'ekleyin - imzalamaya başlayın - N gün sonra eski olanı JWKS'den kaldırın - temizleyin.
Geri bildirim: TTL ile 'jti/sid' listeleri; Bir olay durumunda, geçici olarak 'exp' azaltın ve zorla çıkış yapın (yenilemeyi devre dışı bırakın).

9) Çok kiracılı ve veri minimizasyonu

'Kiracı'/' org' simgesini yalnızca mimari tarafından gerekirse belirteçe ekleyin; Aksi takdirde, nitelikleri PDP'den 'sub'ile çekin.
PII yok; Minimum pul seti - daha az sızıntı ve korelasyon riski.

10) Pratik doğrulama kontrol listesi (kaynak sunucusu)

  • Parsim sadece imza ve temel boyut sınırlarının doğrulanmasından sonra.
  • yapılandırmadan 'alg'; Beklenmedik olanları reddet.
  • 'iss' ∧ 'aud' ∧ 'exp' ∧ 'nbf' ∧ 'iat' ('clock _ skew'ile) işaretleyin.
  • Yerel dizinde/JWKS'de 'kimlik' işaretleyin (kısa TTL).
  • Dış işaretçileri filtreleyin/normalleştirin ('jku/x5u' - yalnızca allow-list).
  • Limit damga uzunluğu/kompozisyonu (şema).
  • Nesne Kaynak Yetkilendirmesini Uygula (BOLA-first).
  • Log 'kid', 'sub', 'aud', 'iss', 'jti', 'exp', 'tenant', 'trace _ id' (PII olmadan).
  • İmza hatalarının metrikleri, gecikmeler, rotasyon denetimleri.

11) Güvenli politika örnekleri (pseudo)

11. 1 Algoritma beklentilerinin yapılandırılması

yaml jwt:
expected_issuer: "https://auth. example. com"
expected_audience: ["wallet-service"]
allowed_algs: ["ES256"] # fix the jwks_url: "https ://auth. example. com/.well-known/jwks. json"
jwks_cache_ttl: 600s clock_skew: 60s required_claims: ["iss","aud","sub","exp","iat"]

11. 2 'jku/x5u' uzaktan bırakma

yaml reject_untrusted_key_sources: true allowed_jku_hosts: ["auth. example. com"] # if absolutely necessary

11. 3 Örnek Geribildirim Listesi (Redis)

pseudo if redis. exists("revoke:jti:" + jti) then deny()
if now() > exp then deny()

12) Gözlemlenebilirlik ve görülme sıklığı

Метрики: 'jwt _ verify _ fail _ total {reason}', 'jwt _ expired _ total', 'jwks _ refresh _ total', доля 'kid'.
Günlükler (yapılandırılmış): 'iss/aud/sub/kid/jti/exp/tenant/trace _ id', başarısızlık nedeni.
Panolar: "Yakında sona erecek", doğrulama hatalarında bir artış, bölgeye/istemciye göre dağıtım.
Uyarılar: 'verify _ fail' (imza/algoritma) büyümesi, JWKS hataları, süresi dolan belirteçlerin payı.

13) Antipatterns

Token'dan 'alg'a güvenin; 'Hayır'ı destekleyin.
Uzun ömürlü erişim belirteçleri ve yenileme rotasyonu yok.
KMS olmadan ENV'de kısa bir sır/sır ile HS256.
Herhangi bir etki alanından 'jku/x5u'kabul edin; İzin listesi olmadan JWKS'yi dinamik olarak yükleyin.
PII/sırları yük JWS'ye yerleştirin.
XSS riskleri olduğunda belirteçleri 'yerel Depolama'da saklayın.
Doğrulama hatalarını önleyin (200 s "yumuşak hata" döndürün).
BOLA kontrolleri yok ve sadece 'kapsam/rol'e güveniyor.

14) iGaming/Finansın Özellikleri

Markalar: 'Kyc _ level', 'risk _ tier', 'tenant', sıkı 'aud'.
Yazma işlemleri için kısa TTL (mevduat/çıkış), kritik yollar için PoP/DPoP veya mTLS.
Düzenleyici denetim: Girdilerin/arızaların değiştirilemez günlükleri, bölge sınırları içinde günlüklerin depolanması.
Ortaklar/PSP'nin ayrı anahtarları/' aud ', kiracı anahtarları ve ayrı JWKS'leri vardır.

15) Prod Hazırlık Kontrol Listesi

  • Algoritmaların zor izin listesi; "Hayır'a izin verilmez.
  • 'iss/aud/exp/nbf/iat/jti' kontrol edilir; kısa 'exp'.
  • çakışan JWKS, kısa TTL önbellek; "Çocuk" paylaşımlarının izlenmesi.
  • Yenileme - kullanımda döndürme; TTL ile 'jti/sid' listeleri; Review Playbook.
  • PoP/DPoP veya mTLS kritik rotalarda.
  • HttpOnly-cookies for browser, CSP/Trusted Types vs. XSS; CSRF koruması.
  • Yükte PII yok; Minimum işaret kümesi.
  • Doğrulama ve başarısızlık metrikleri/günlükleri; JWKS/verify_fail uyarır.
  • Negatif senaryo testleri: RS - HS takas,'çocuk '-injections,' jku 'spoofing, oversize, saat eğriltme.

16) TL; DR

Sunucu tarafındaki algoritmayı ve anahtarları düzeltin, belirteçten 'alg'a güvenmeyin,' iss/aud/exp/nbf/iat/jti 'talep edin. Üst üste binen JWKS aracılığıyla anahtarları döndürün, belirteçleri kısa ömürlü tutun ve tek kullanımlık yenileyin. Belirteçleri güvenli bir şekilde saklayın (web için HttpOnly-cookie), damgaları en aza indirin, PII koymayın. 'Jku/x5u/kid' vektörlerini kapatın, zayıf sırlarla HS256 kaçının, kritik yollara PoP/DPoP veya mTLS ekleyin ve her zaman kaynak düzeyinde BOLA kontrolleri yapın.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.