GH GambleHub

JWT: түзүлүшү жана алсыздыгы

1) JWT деген эмне жана кайда колдонулат

JWT - 'Base64Url (header) форматындагы компакттуу өзүн-өзү камсыз кылуучу бекитүү контейнери (claims). Base64Url(payload). Base64Url(signature)`.

Үчүн колдонулат:
  • JWS (кол коюлган токендер - аныктыгы/бүтүндүгү),
  • JWE (шифрленген токендер - купуялуулук),
  • OIDC/OAuth2/ID токендер, ошондой эле service-to-service аутентификация катары.

Артыкчылыктары: автономия, кэшбэк, аз кошумча чыгымдар. Кемчиликтери: туура эмес валидация тобокелдиги, татаал чакыртып алуу учурлары.

2) JWT түзүлүшү

2. 1 аталышы (header, JSON)

Минималдуу: алгоритм жана ачкычтын идентификатору.

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

'alg': кол коюу/шифрлөө алгоритми (RS256/ES256/PS256/HS256 ж.б.).
'kid': ачкыч көрсөткүчү (JWKS-айлануу үчүн).
Кошумча ачкыч булактары: 'jku', 'x5u' (караңыз алсыздык § 6. 3).

2. 2 Load (Payload, JSON)

Стандартташтырылган белгилер:
  • `iss` (issuer), `aud` (audience), `sub` (subject)
  • 'exp' (мөөнөтү бүттү), 'nbf' (мурда эмес), 'iat' (берилген)
  • 'jti' (Token ID, сын-пикирлер үчүн жарактуу)
  • домен-клеймо: 'scope/roles', 'tenant', 'kyc _ level' ж.б.

2. 3 Кол тамга (signature)

JWS = `sign(base64url(header) + "." + base64url(payload), private_key)`

Текшерүү: катуу тиешелүү коомдук ачкыч жана так сервер күтүп алгоритм.

3) Негизги текшерүү параметрлери

1. Алгоритм 'header мазмунуна ишенбестен, ресурс-сервердин конфигурациясы (allow-list) менен белгиленет. alg`.
2. так дал 'iss' жана 'aud' текшерүү, 'exp/nbf' - кичинекей эске алуу менен 'clock _ skew' (± 30-60s).
3. Бир гана ачкыч жана эч кандай айлануу жок болсо, 'kid' токендерин четке кагуу; болбосо - талап кылуу 'kid'.
4. Объекттик денгээлде уруксаты жок эч кандай маркаларга ишенбеңиз (BOLA-first).
5. Парсинг - крипто текшерүүдөн кийин; декоддоого чейин негизги өлчөмдөгү текшерүү.

4) JWS vs JWE

JWS: кол коюлган, бирок окуу. Payload PII/сырларды жайгаштырбаңыз.
JWE: payload шифрлейт; татаал интеграция, негизги модель критикалык.
Көпчүлүк API жетиштүү JWS + payload сезимтал маалыматтарды тыюу.

5) Токендин жашоо цикли

Access: кыска убакыт (5-30 мүнөт).
Refresh: узак (7-30 күн), rotate-on-use (бир жолу колдонулуучу), сактоо "кара тизме" 'jti/sid'.
Revocation: TTL менен 'jti' тизмелери, opaque-токендер үчүн интроспекция, окуяларда 'exp' кыскартуу.
Ачкычтарды айлантуу: JWKS менен жабуу (эски + жаңы), макаланы карагыла "Ачкычтарды айлантуу".

6) Тез-тез алсыздыктар жана аларды жабуу үчүн

6. 1 'alg = none '/алгоритмин алмаштыруу

Жыйынтык: сервер 'alg' талаасына ишенет жана кол коюлбаган токенди кабыл алат.
Коргоо: катуу allow-list алгоритмдер Server; 'none' жана күтүлбөгөн маанилерди четке кагуу.

6. 2 RS256 → HS256 swap (симметриялаштыруу)

Жыйынтык: чабуулчу 'alg' HS256 алмаштырат жана коомдук ачкычты HMAC сыры катары колдонот.
Коргоо: конфигурация алгоритмине ачкычты байлоо; симметриялуу/асимметриялуу провайдерлерди бир 'kid'.

6. 3 ачкычтарды киргизүү ('kid/jku/x5u')

Сценарийлер:
  • 'jku' чабуулчу көзөмөлдөгөн JWKS (анын ачкычын киргизет) көрсөтөт.
  • 'x5u '/' x5c' тышкы күбөлүктөрдү кыянаттык.
  • 'kid' менен инъекция жол/SQL ('../../privkey. pem "'же' '' 'OR 1 = 1 --' ').
Коргоо:
  • алыскы 'jku/x5u' кулак же катуу allow-list домендерди чыпкалоо.
  • 'kid' жергиликтүү каталогдо ачкыч катары гана колдонулат (таблица/кэш), эч кандай файл жолдору/SQL конкатенациялар.
  • JWKS ишенимдүү URL менен жүктөп, кыска TTL, кол/pinning канал.

6. 4 алсыз HS256 сырлары (brutfors)

Жыйынтык: HMAC-жашыруун кыска/агып → кол алмаштыруу.
Коргоо: асимметрия (RS/ES/PS) же жашыруун узундугу ≥ 256 бит колдонуу, сырлар - гана KMS.

6. 5 Жок/нөлдүк маркалар

Жок 'aud '/' iss '/' exp' → токен кросс-кызматы ылайыктуу же чексиз.
Өтө узун 'exp' → компромисс коркунучу.
Коргоо: клеймо толук топтомун талап, 'exp' кыска, 'nbf '/' iat' менен тастыктоо 'clock _ skew'.

6. 6 Replay жана токен уурдоо

Маңызы: токенди кармоо/кайталоо (логдордо агып кетүү, XSS, TLS жок MitM).

Коргоо:
  • TLS везде, `Secure`+`HttpOnly` cookie, SameSite=Lax/Strict.
  • DPoP/PoP (токенди кардар ачкычына байланыштыруу) жана/же өнөктөштөр үчүн mTLS.
  • Кыска 'exp', refresh-ротация, device-binding.

6. 7 XSS/сактоо аркылуу агып

Жыйынтык: JWT сактоо 'localStorage '/' sessionStorage' → жеткиликтүү JS.
Коргоо: HttpOnly-cookie (cookie-модели мүмкүн болсо) + катуу CSP/Ишенимдүү түрлөрү менен жетүү белгилерин сактоо.
Cookie жок SPA үчүн - эс тутумдагы токенди изоляциялоо, минималдуу жашоо, XSSтен коргоо.

6. 8 CSRF

Жыйынтык: үчүнчү тараптын сайтынан куки сессияларында суроо-талаптар.
Коргоо: SameSite, анти-CSRF токендер (double submit), 'Origin/Referer' текшерүү, Fetch-Metadata чыпкалар.

6. 9 Oversize/өлчөмүн кыянаттык

Маңызы: чоң payload/баш макалалар, DoS үчүн парсинг.
Коргоо: аталыштары/дене өлчөмдөрүнүн чектери, early-reject 431/413, fix клеймо топтому.

6. 10 алмаштыруу 'typ '/' cty'

Маңызы: түрлөрдүн башаламандыгы ('typ: "JWT"'), кошулган JOSE объектилери.
Коргоо: коопсуздук үчүн 'typ/cty' четке кагып, белгиленген алгоритмдерди жана клеймо схемасын таянуу.

7) Токендерди сактоо жана өткөрүп берүү

7. 1 Server API (machine-to-machine)

mTLS/HMAC, JWT үчүн асимметрия, каналдар - меш аркылуу.
Ачкычтарды сактоо - KMS/HSM, график боюнча айлануу, JWKS менен жабуу.

7. 2 Браузердик кардарлар

HttpOnly Secure Cookie для access/refresh; кыска TTL; жаңыртуу - 'SameSite = None' менен "silent refresh" аркылуу HTTPS астында гана.
Катуу CSP, ишенимдүү түрлөрү, XSS коргоо; SPA үчүн - мүмкүн болсо, дискте токенди сактабаңыз.

8) JWKS, айлануу жана кайра чакыртып алуу

JWKS авторизатор тарабынан жарыяланат; керектөөчүлөр 5-15 мүнөт кэш.
Айлануу планы: жаңы 'kid' кошуу → аларга кол баштоо → N күндөн кийин JWKS → purge эски алып салуу.
Review: 'jti/sid' c TTL тизмелери; учурда убактылуу кыскартуу 'exp' жана fors-logout (майып refresh).

9) Multi-tenant жана маалыматтарды азайтуу

'tenant '/' org' белгилерин архитектура боюнча гана киргизүү; болбосо PDP 'sub' боюнча атрибуттарды тартуу.
Эч кандай PII; → минималдуу маркалар топтому аз агып чыгуу жана корелляция коркунучу.

10) Практикалык валидация чек-тизмеси (ресурстук сервер)

  • Парсим кол тамгасын жана негизги өлчөм чектерин текшергенден кийин гана.
  • 'alg' конфигурациясынан; күтүүсүздөрдү четке кагуу.
  • 'iss' ∧ 'aud' ∧ 'exp' ∧ 'nbf' ∧ 'iat' (c 'clock _ skew').
  • жергиликтүү каталогу/JWKS боюнча 'kid' текшерүү (кыска TTL).
  • Тышкы көрсөткүчтөрдү чыпкалоо/нормалдаштыруу ('jku/x5u' - allow-list гана).
  • Клеймо узундугу/курамын чектөө (схема).
  • Ресурска объекттин авторизациясын колдонуу (BOLA-first).
  • Логин 'kid', 'sub', 'aud', 'iss', 'jti', 'exp', 'tenant', 'trace _ id' (PIIсиз).
  • Кол коюу каталарынын, кечигүүлөрдүн, айлануу аудитинин көрсөткүчтөрү.

11) Коопсуз саясаттын мисалдары (псевдо)

11. 1 Алгоритмдин күтүү конфигурациясы

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' баш тартуу

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

11. 3 Пикир тизмеси мисал (Redis)

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

12) Байкоо жана форензия

Метрики: `jwt_verify_fail_total{reason}`, `jwt_expired_total`, `jwks_refresh_total`, доля `kid`.
Логи (структураланган): 'iss/aud/sub/kid/jti/exp/tenant/trace _ id', баш тартуу себеби.
Дашборддор: "жакында бүтөт", валидация каталарынын көбөйүшү, региондор/кардарлар боюнча бөлүштүрүү.
Alerty: өсүшү 'verify _ fail' (кол/алгоритм), JWKS каталар, мөөнөтү өтүп кеткен токендердин үлүшү.

13) Антипаттерндер

Ишенимдүү 'alg' токен; колдоо 'none'.
Узак мөөнөттүү access токендер жана refresh-айлануу жок.
HS256/KMS жок ENV жашыруун.
кабыл алуу 'jku/x5u' кандайдыр бир домен менен; динамикалык allow-list жок JWKS жүктөп.
PII/сырларды JWS төлөөгө коюу.
XSS тобокелдиктери болгон учурда 'localStorage' токендерин сактоо.
валидация каталарын өчүрүү ("soft error" менен 200 кайтаруу).
БАЛА текшерүүлөрдүн жоктугу жана 'scope/role' гана таянуу.

14) iGaming/каржы өзгөчөлүктөрү

Клеймо: 'kyc _ level', 'risk _ tier', 'tenant', катуу 'aud'.
Кыска TTL үчүн write-операциялар (депозиттер/корутундулар), PoP/DPoP же mTLS үчүн маанилүү каттамдар.
Жөнгө салуучу аудит: өзгөрүлбөс кирүү/баш тартуу журналдары, аймактын чегинде логторду сактоо.
Өнөктөштөр/PSP - өзүнчө ачкычтар/' aud ', per-tenant ачкычтар жана өзүнчө JWKS.

15) Prod-даярдык чек тизмеси

  • Катуу allow-list алгоритмдер; 'none' тыюу салынган.
  • 'iss/aud/exp/nbf/iat/jti' текшерилет; кыска 'exp'.
  • JWKS, кыска TTL кэш; 'kid' акцияларына мониторинг жүргүзүү.
  • Refresh — rotate-on-use; TTL менен 'jti/sid' тизмелери; сын playbook.
  • PoP/DPoP же mTLS критикалык жолдор боюнча.
  • HttpOnly-cookies үчүн браузер, CSP/Trusted Types vs XSS; CSRF коргоо.
  • Payload боюнча PII жок; маркалардын минималдуу топтому.
  • Валидация жана ийгиликсиздик боюнча метрика/логи; аллергия JWKS/verify_fail.
  • терс жагдайлар сыноо: RS → HS swap, 'kid' -инъекция, 'jku' spoofing, oversize, clock-skew.

16) TL; DR

Алгоритмди жана ачкычтарды сервердин тарабына бекитиңиз, 'alg' токенине ишенбеңиз, 'iss/aud/exp/nbf/iat/jti' талап кылыңыз. Баскычтарды JWKS аркылуу кайталоо менен айлантуу, токендерди кыска мөөнөттүү, ал эми refresh - бир жолу колдонулуучу. Токендерди коопсуз сактаңыз (Веб үчүн HttpOnly cookie), маркаларды минималдаштырыңыз, PIIди коюңуз. Жабуу 'jku/x5u/kid' -векторлор, алсыз сырлар менен HS256 качуу, маанилүү жолдорго PoP/DPoP же mTLS кошуу жана ар дайым ресурстун деңгээлине БАЛА текшерүүлөрдү жүргүзүү.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.