GH GambleHub

JWT: struktura i słabości

1) Co to jest JWT i gdzie jest używany

JWT to kompaktowy, samodzielny kontener oświadczeń w formacie „BaseUrl (nagłówek)”. Base64Url (ładunek użytkowy). Base64Url (podpis) ".

Stosowany do:
  • JWS (podpisane tokeny - autentyczność/integralność),
  • JWE (szyfrowane żetony - prywatność),
  • OIDC/OAuth2 jako tokeny dostępu/identyfikatora, a także uwierzytelnianie usług.

Plusy: autonomia, pamięć podręczna, niskie koszty ogólne. Minusy: ryzyko nieprawidłowej walidacji, złożone przypadki wycofania.

2) Struktura JWT

2. 1 Nagłówek (JSON)

Minimum: algorytm i identyfikator klucza.

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

„alg”: algorytm podpisu/szyfrowania (RS256/ES256/PS256/HS256 itp.).
„dziecko”: wskaźnik do klucza (dla rotacji JWKS).
Opcjonalne źródła kluczowe: 'jku', 'x5u' (zob. luki ust. 6. 3).

2. 2 Ładunek użytkowy (JSON)

Znormalizowane znaczki:
  • „iss' (emitent),” aud' (publiczność), „sub” (przedmiot)
  • „exp” (czas ważności), „nbf” (nie wcześniej), „iat” (wydany)
  • 'jti' (token ID, odwołalne)
  • znaczki domeny: „zakres/role”, „najemca”, „kyc _ level” itp.

2. 3 Podpis

JWS = 'znak (base64url (nagłówek) + ". + base64url (ładunek użytkowy), private_key)'

Weryfikacja: ściśle odpowiadający klucz publiczny i dokładnie algorytm, którego oczekuje serwer.

3) Kontrola podstawowa niezmienna

1. Algorytm jest ustawiony przez konfigurację serwera zasobów (lista zezwoleń) i nie jest ufany zawartości 'headera. alg '.
2. Sprawdź 'iss' i' aud' dla dokładnego dopasowania, 'exp/nbf' - biorąc pod uwagę małe 'zegar _ skew' (± 30-60s).
3. Odmówić żetonów bez „dziecka” tylko wtedy, gdy istnieje jeden klucz i nie ma obrotu; w przeciwnym razie zażądaj „dziecka”.
4. Nie ufaj żadnym znaczkom bez autoryzacji poziomu obiektu (BOLA-first).
5. Parsing - po weryfikacji kryptograficznej; podstawowe kontrole rozmiaru przed dekodowaniem.

4) JWS vs WiI

JWS: podpisane, ale czytelne. Nie wkładać ładunku PII/tajemnic.
JWE: szyfruje ładunek użytkowy; integracja jest trudniejsza, kluczowy model jest krytyczny.
W większości API, JWS + zakaz danych wrażliwych w ładunku wystarczy.

5) Token cyklu życia

Dostęp: krótkoterminowy (5-30 minut).
Odśwież: dłuższy (7-30 dni), obrót w użyciu (jednorazowy), zachowaj „czarną listę” jti/sid'.
Odwołanie: wykazy 'jti' z TTL, introspekcja dla nieprzezroczystych żetonów, skrót' exp 'dla incydentów.
Rotacja klucza: JWKS z nakładaniem się (stary + nowy), patrz artykuł „Rotacja klucza”.

6) Częste zagrożenia i sposób ich zamykania

6. 1 'alg = brak '/zastąpienie algorytmem

Linia dolna: Serwer ufa polu 'alg' i akceptuje niezapisany token.
Ochrona: twarda lista algorytmów na serwerze; odrzucić 'brak' i nieoczekiwane wartości.

6. 2 RS256 → swap HS256 (symetria)

Najważniejsze: napastnik zastępuje 'alg' z HS256 i używa klucza publicznego jako tajemnicy HMAC.
Ochrona: powiązać klucz z algorytmem z konfiguracją; nie mieszać dostawców symetrycznych/asymetrycznych w jednym dziecku.

6. 3 wtrysk klucza („kid/jku/x5u”)

Scenariusze:
  • 'jku' punkty do JWKS kontrolowanego przez atakującego (przesuwa klucz).
  • "x5u "/" x5c' nadużycie świadectw zewnętrznych.
  • „wtrysk ścieżki dziecięcej/SQL (”.. "/../privkey. pem „'lub' 'OR 1 = 1 --”').
Ochrona:
  • Ignoruj usunięte 'jku/x5u' lub filtr przez ścisłe domeny listy permit.
  • 'kid' może być używany tylko jako klucz w katalogu lokalnym (tabela/pamięć podręczna), bez ścieżek plików/konkatenacji SQL.
  • Ładowanie JWKS z zaufanych adresów URL, krótki TTL, kanał podpisu/pinning.

6. 4 Słabe tajemnice HS256 (brutalna siła)

Bottom line: HMAC secret is short/leaked → signature spoofing.
Ochrona: używać asymetrii (RS/ES/PS) lub sekretnej długości ≥ 256 bitów, tajemnice - tylko w KMS.

6. 5 Brakujące/nieprawidłowe znaczki

Brak 'aud '/' iss'/' exp' → token jest obsługiwalny krzyżowo lub nieskończony.
Zbyt długi 'exp' → ryzyko kompromisu.
Ochrona: wymagać pełnego zestawu znaków, 'exp' krótki, 'nbf '/' iat' zwalidować z 'zegar _ skew'.

6. 6 Powtórka i token kradzież

Istota: przechwytywanie/powtarzanie tokena (wyciek logów, XSS, MitM bez TLS).

Ochrona:
  • TLS веба, 'Secure' + 'Only' cookie, Site = Lax/Strict.
  • DPoP/PoP (powiązanie tokena z kluczem klienta) i/lub mTLS dla partnerów.
  • Krótkie 'exp', odświeżanie, wiązanie urządzenia.

6. 7 XSS/wycieki do przechowywania

Linia końcowa: Przechowywanie JWT w pamięci „Z pamięci ”/„ Z” jest → dostępne dla JS.
Ochrona: tokeny dostępu do sklepu w Pliku Only-cookie (jeśli model cookie jest możliwy) + rygorystyczne typy CSP/Trusted.
Dla SPA bez ciasteczek - odizolować token w pamięci, żyć minimalnie, chronić przed XSS.

6. 8 CSRF

Najważniejsze: podczas sesji cookies, prośby strony trzeciej.
Ochrona: Site, żetony anty-CSRF (podwójne przesłanie), kontrola „Origin/Referer”, filtry Fetch-Metadata.

6. 9 Nadmierne nadużywanie rozmiarów

Gist: ogromny ładunek/nagłówki, DoS na parsing.
Ochrona: ograniczenia wielkości tytułu/nadwozia, wczesne odrzucenie 431/413, stały zestaw znaczków.

6. 10 Substytucja „typ ”/„ typ”

Istota: zamieszanie typów ('typ:' JWT'), gniazdowane obiekty JOSE.
Ochrona: ignorować „typ/cty” dla bezpieczeństwa, polegać na stałych algorytmach i schemacie marki.

7) Token do przechowywania i przenoszenia

7. 1 Interfejsy API serwera (maszyna-maszyna)

mTLS/HMAC, najlepiej asymetria dla JWT, kanały przez siatkę.
Sklep kluczy - KMS/HSM, zaplanowana rotacja, nakładanie się JWKS.

7. 2 Klienci przeglądarki

Tylko bezpieczne pliki cookie дла access/refresh; krótki TTL; aktualizacja - za pomocą „silent refresh” z 'Site = None' only under HTTPS.
Ścisłe CSP, zaufane typy, ochrona przed XSS; dla SPA - jeśli to możliwe, nie przechowywać tokena na dysku.

8) JWKS, rotacja i wycofanie

JWKS jest publikowany przez autoryzatora; konsumenci buforują przez 5-15 minut.
Plan rotacji: dodać nowe 'dziecko' → rozpocząć ich podpisywanie → po N dni usunąć stary z JWKS → oczyścić.
Informacje zwrotne: listy 'jti/sid' z TTL; w przypadku incydentu, czasowo zmniejszyć 'exp' i force-logout (wyłączyć odświeżanie).

9) Wielokrotny najemca i minimalizacja danych

umieścić „najemcę ”/„ org” w tokenie tylko w razie potrzeby przez architekturę; w przeciwnym razie pobierz atrybuty z PDP przez 'sub'.
Brak PIIs; minimalny zestaw znaczków → mniejsze ryzyko wycieków i korelacji.

10) Praktyczna lista kontrolna walidacji (serwer zasobów)

  • Parsim tylko po weryfikacji podpisu i podstawowych limitów wielkości.
  • „alg” z konfiguracji; odrzucić nieoczekiwane.
  • Sprawdź 'iss',' aud', ',' exp ',', ', nbf', ',' iat '(z' zegar _ skew ').
  • Sprawdź 'dzieciak' w katalogu lokalnym/JWKS (short TTL).
  • Filtrowanie/normalizacja wskaźników zewnętrznych ('jku/x5u' - tylko list zezwoleń).
  • Ograniczona długość/skład pieczęci (schemat).
  • Zastosuj autoryzację zasobów obiektu (BOLA-first).
  • Log 'kid', 'sub', 'aud',' iss', 'jti', 'exp', 'lokator', 'trace _ id' (bez PII).
  • Wskaźniki błędów w podpisie, opóźnień, audytów rotacyjnych.

11) Przykłady bezpiecznych polityk (pseudo)

11. 1 Konfiguracja oczekiwań algorytmu

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 Upuszczanie zdalnego 'jku/x5u'

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

11. 3 Przykładowa lista opinii (Redis)

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

12) Obserwowalność i częstość występowania

Метрика: 'jwt _ verify _ fail _ total {reason}', 'jwt _ expired _ total', 'jwks _ refresh _ total', дола 'kid'.
Kłody (strukturyzowane): "iss/aud/sub/kid/jti/exp/najemca/trace _ id', powód awarii.
Deski rozdzielcze: „wygasa wkrótce”, wzrost błędów walidacyjnych, dystrybucja według regionu/klienta.
Alerty: wzrost 'verify _ fail' (podpis/algorytm), błędy JWKS, udział wygasłych żetonów.

13) Antypattery

Zaufanie 'alg' z tokena; wsparcie „żadnego”.
Długotrwałe żetony dostępu i brak odświeżania.
HS256 z krótką tajemnicą/tajemnicą bez KMS.
Akceptuj 'jku/x5u' z dowolnej domeny; dynamicznie ładować JWKS bez listy zezwoleń.
Umieść PII/sekrety w ładunku JWS.
Zapisz żetony w 'Zapamiętywanie', gdy istnieje ryzyko XSS.
Tłumić błędy walidacji (zwraca 200 s „błąd miękki”).
Brak kontroli BOLA i poleganie wyłącznie na „zakresie/roli”.

14) Szczegóły dotyczące iGaming/Finance

Marki: 'kyc _ level', 'risk _ tier', 'lokator', 'aud'.
Krótki TTL dla operacji zapisu (depozyty/wyjścia), PoP/DPoP lub mTLS dla tras krytycznych.
Audyt regulacyjny: niezmienne dzienniki wejść/awarii, przechowywanie kłód w granicach regionu.
Partnerzy/PSP mają oddzielne klucze/' aud', klucze lokatora i oddzielny JWKS.

15) Lista kontrolna gotowości Prod

  • Twarda lista algorytmów; „żaden” nie jest dozwolony.
  • sprawdza się „iss/aud/exp/nbf/iat/jti”; krótkie 'exp'.
  • pokrywała się JWKS, krótka pamięć podręczna TTL; monitorowanie udziałów „dzieciaków”.
  • Odśwież - obrót w użyciu; "jti/sid' listy z TTL; recenzja playbook.
  • PoP/DPoP lub mTLS na trasach krytycznych.
  • Tylko pliki cookie dla przeglądarki, CSP/Zaufane typy kontra XSS; Ochrona CSRF.
  • Brak PII w ładunku; minimalny zestaw znaków.
  • Mierniki walidacji i błędów/kłody; alerty JWKS/verify_fail.
  • Negatywne testy scenariusza: RS → swap HS, 'kid' -injections, 'jku' spoofing, oversize, clock-skew.

16) TL; DR

Naprawić algorytm i klawisze po stronie serwera, nie ufać 'alg' z tokena, żądać 'iss/aud/exp/nbf/iat/jti'. Obróć klucze poprzez nakładanie się JWKS, zachować żetony krótkotrwałe i odświeżyć jednorazowe. Bezpiecznie przechowywać żetony (Tylko pliki cookie dla sieci), minimalizować znaczki, nie umieszczać PII. Zamknij wektory 'jku/x5u/kid', unikaj HS256 słabymi tajemnicami, dodaj PoP/DPoP lub mTLS na ścieżkach krytycznych i zawsze wykonuj kontrole BOLA na poziomie zasobów.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.