GH GambleHub

JWT 'կառուցվածք և խոցելիություն

1) Ի՞ նչ է JWT-ը և որտեղ է այն օգտագործվում

JWT-ը կոմպակտ ինքնաբուխ հայտարարությունների կոնտակտ է (claims) "Baseae Urll (header) ձևաչափով։ Base64Url(payload). Base64Url(signature)`.

Օգտագործվում է

JWS (ստորագրված հոսանքներ - իսկություն/ամբողջականություն),

JWE (գաղտնագրված հոսանքներ - գաղտնիություն),

OIDC/OAuth2 որպես international/ID հոսանքներ, ինչպես նաև 108-to-105։

Պլյուսներ ՝ ինքնավարություն, հավասարակշռություն, փոքր ծախսեր։ Մինուսներ 'սխալ վալիդացիայի ռիսկ, բարդ հետադարձ կապ։

2) JWT կառուցվածքը

2. 1 Վերնագիր (header, JSON)

Նվազագույն 'ալգորիթմ և բանալին։

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

'alg': Ստորագրման ալգորիթմ/2019 (RS256/ES256/PS256/HS256 և այլն)։

'kid': բանալին ցուցիչ (JWKS-ռոտացիայի համար)։

Օբյեկտիվ աղբյուրները բացատրվում են ՝ «jku», «x5u» (տե՛ ս 246 խոցելիությունը։ 3).

2. 2 Օգտակար նախաձեռնություն (payload, JSON)

Ստանդարտացված կլեյմեր

`iss` (issuer), `aud` (audience), `sub` (subject)

«exp» (ժամանակը), «nbf» (ոչ շուտ), «iat» (հրատարակված)

«jti» (rocken, հարմար է ակնարկների համար)

domain-cleims: «scoase/roles», «tenae», «kyc _ level» և այլն։

2. 3 Ստորագրություն (signature)

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

Ստուգում 'խստորեն ներկայացված հանրային բանալին և հենց այն ալգորիթմը, որը սերվերը ակնկալում է։

3) Ստուգման հիմնական ինվարանտները

1. Ալգորիթմը ամրագրված է ռեսուրսի սերվերի (allow-list) միգրացիայի միջոցով, այլ ոչ թե վստահում է պարունակվող «header» -ին։ 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) Հեղուկի կյանքի ցիկլը

Մոսկվա ՝ կարճ ժամանակահատվածը (5-30 րոպե)։

Refresh: ավելի երկար (7-30 օր), rotate-on-use (միանգամյա), պահել "սև ցուցակը" 'jti/sid "։

Revocation: «jti» ցուցակները TTL-ի հետ, opaque-Toxens-ի ինտրոպիա, միջադեպերի ժամանակ «exp» կրճատումը։

Միգրանտների ռոտացիան 'JWKS-ը համընկնումով (հին + նոր), տե՛ ս «Միգրացիան» հոդվածը։

6) Հաճախակի խոցելիությունները և ինչպես փակել դրանք։

6. 1 'alg = none '/ալգորիթմի փոփոխությունը

Իմաստն այն է, որ սերվերը վստահում է դաշտին 'alg' և ընդունում է չգրված հոսանք։

Պաշտպանություն 'կոշտ allow-list ալգորիթմներ սերվերի վրա։ շեղել «none» և անսպասելի արժեքներ։

6. 2 RS256 ww.HS256 swap (սիմետրիզացիա)

Բանն այն է, որ հարձակվողը փոխում է «ալգը» HS256-ում և օգտագործում է հանրային բանալին որպես HMAC գաղտնիք։

Պաշտպանություն 'կապել ալգորիթմին միգրացիայի հետ։ մի խառնեք սիմետրիկ/ասիմետրիկ պրովայդերները մեկ 'kid'։

6. 3 Միգրացիա 2019 («kid/jku/x5u»)

Սցենարներ

«jku» -ը ցույց է տալիս, որ վերահսկվում է JWKS հարձակվողի կողմից (հաշվում է իր բանալին)։

«x5u »/« x5c» արտաքին հավաստագրերի չարաշահումը։

"kid" 'ճանապարհի/SQL (' "../../privkey։ pem" կամ "OR 1 = 1 - ")։

Պաշտպանություն

Անտեսել հեռավոր «jku/x5u» կամ ֆիլտրել խիստ allow-list ածխաջրածինների վրա։

"kid 'օգտագործել միայն որպես բանալին տեղական տարբերակում (www.ces), առանց հիբրիդային ճանապարհների/SQL կոնկենսացիաների։

JWKS-ը բեռնվում է URL-ի վստահված, կարճ TTL-ի, ստորագրության/pinning ջրանցքի հետ։

6. 4 Թույլ գաղտնիքները HS256 (Բրուտֆորս)

Բանն այն է, որ HMAC գաղտնիքը կարճ/բադր է ստորագրությունը փոխելու համար։

Պաշտպանություն 'օգտագործել ասիմետրիա (RS/ES/PS) կամ գաղտնիության երկարությունը 24256 բիթ, գաղտնիքները միայն KFC-ում։

6. 5 Բացակայում/ոչ որակյալ սոսինձ

Ոչ 'aud '/« iss '//» exp' international cross-ծառայողական կամ անսահման։

Չափազանց երկար «exp» -ը վարկաբեկման ռիսկ է։

Պաշտպանություն 'պահանջել կլեյմերի ամբողջական հավաքածու, "exp" կարճ, "nbf '/" iat' valivation's 'clock _ skew"։

6. 6 Replay եւ գողություն

Բանն այն է, որ կոտրելը/պտուտակը (արտահոսքը լոգարաններում, XIV, MitM առանց TLS)։

Պաշտպանություն

TLS везде, `Secure`+`HttpOnly` cookie, SameSite=Lax/Strict.

DPoP/PoP (միացումը հաճախորդի բանալին) և/կամ mTRK գործընկերների համար։

Կարճ «exp», refresh-ռոտացիա, device-binding։

6. 7 Արտահոսք XIV/պահեստի միջոցով

Էությունը 'JWT պահպանումը' www.alStorage '/« sessionStorage »-ը հասանելի է JS-ում։

Պաշտպանություն 'պահպանեք թոքերը Conly-cookie-ում (եթե հնարավոր է cookie-մոդել) + խիստ CSP/Trusted Types-ում։

SPA-ի համար առանց cookie-ը հիշողության մեջ հոսանք է, նվազագույն ապրել, պաշտպանել XIV-ից։

6. 8 CSRF

Բանն այն է, որ cookie-2019-ի դեպքում կողմնակի կայքից հարցումները։

Պաշտպանություն ՝ SoftSite, anti-CSRF թոկեններ (double corit), «Origin/Referer» ստուգում, Fetch-Metadata ֆիլտրեր։

6. 9 Oversize/չափսի չարաշահում

Էությունը 'հսկայական payload/վերնագրեր, DoS պարսինգի վրա։

Պաշտպանություն ՝ վերնագրերի/մարմնի չափի սահմաններ, early-reject 431/413, կլեյմի ֆիքսված հավաքածու։

6. 10 Փոխարենը 'typ '/' cty'

Բանն այն է, որ տեսակների խառնաշփոթը ("typ: " JWT "), որը ներդրվել է JOSE օբյեկտների կողմից։

Պաշտպանություն 'անտեսել «typ/cty» անվտանգության համար, ապավինել ֆիքսված ալգորիթմներին և կլեյմների սխեմային։

7) Տոկենների պահպանումը և փոխանցումը

7. 1 Սերվերային API (machine-to-machine)

MTIM/HMAC-ը, նախընտրում է ասիմետրիա JWT-ի համար, ջրանցքները 'mesh-ի միջոցով։

Տերմինալի պահուստը KFC/HSM է, ժամանակացույցի լուծումը, JWKS-ը 'համընկնումով։

7. 2 Զննարկիչ հաճախորդներ

HttpOnly Secure Cookie для access/refresh; կարճ TTL; նորարարությունը «silent refresh» -ի միջոցով '«SoftSite = None» -ի միջոցով միայն HTTPS-ի տակ։

Խիստ CSP, Trusted Types, պաշտպանել XIV-ից։ SPA-ի համար, հնարավորության դեպքում չպահանջել հոսքը։

8) JWKS, միգրացիա և արձագանք։

JWKS-ը հրապարակվում է հեղինակի կողմից։ սպառողները քաշում են 5-15 րոպե։

Ռոտացիայի պլանը 'ավելացնել նոր' kid 'intel-ը սկսել դրանք N օրվա ընթացքում հեռացնել հին JWKS-ից purge-ից։

Ակնարկ '«jti/sid' c TTL» ցուցակները; Պատահականության դեպքում ժամանակավորապես կրճատել «exp» և fors-logout (հաշմանդամացնել refresh)։

9) Multi-tenae-ը և տվյալների նվազեցումը

Ներառել 'tenault '/' org' -ը հոսանքի մեջ միայն եթե անհրաժեշտ է ճարտարապետությամբ։ հակառակ դեպքում ձգեք ատրիբուտները PDP-ից 'sub'։

Ոչ մի PII; կլեյմների նվազագույն քանակը ավելի քիչ է արտահոսքի և կորլյացիայի վտանգը։

10) Գործնական չեկի թերթիկը (ռեսուրսի սերվեր)

  • Պարսիմ միայն ստորագրությունը ստուգելուց և չափի հիմնական սահմաններից հետո։
  • «alg» կազմաձևից; շեղել անսպասելի։
  • Ստուգել 'iss' me 'aud' exp 'nbf' www.iat '(«clock _ skew»)։
  • Ստուգել «kid» տեղական մոդուլով/JWKS (կարճ TTL)։
  • Ֆիլտրել/նորմալացնել արտաքին նշանները («jku/x5u» - միայն allow-list)։
  • Սահմանափակել երկարությունը/բաղադրությունը (սխեման)։
  • Օգտագործեք օբյեկտի հեղինակային իրավունքը ռեսուրսների վրա (BOLA-first)։
  • Տրամաբանություն 'kid', 'sub', «aud ',» is', «jti ',» exp', «tenae», «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/tenae/trace _ id», ձախողման պատճառը։

Դաշբորդներ ՝ «շուտով», վալիդացիայի սխալների աճը, տարածումը տարածաշրջաններով/հաճախորդներին։

Ալբերտները '«verify _ fail» (ստորագրություն/ալգորիթմ), JWKS սխալները, ժամկետանց հոսանքների մասնաբաժինը։

13) Անտիպատերնի

Վստահել 'alg' -ից։ աջակցել 'none'։

Երկար գոյատևող հիվանդություններ և refresh-ռոտացիայի բացակայություն։

HS256 կարճ գաղտնիքով/գաղտնիքը ENV-ում առանց KFC-ի։

Վերցնել «jku/x5u» ցանկացած տիրույթից։ դինամիկ կերպով բեռնել JWKS առանց allow-list։

PII/գաղտնիքները payload JWS-ում։

Պահել «www.alStorage» -ում XIV ռիսկերի առկայության դեպքում։

Խեղդել վալիդացիայի սխալները (վերադարձնել 200-ից «senserror» -ից)։

BOLA-ստուգումների բացակայությունը և վստահությունը միայն «scope/role» -ի վրա։

14) iGaming/ֆինանսական առանձնահատկությունները

Կլեյմները ՝ «kyc _ level», «risk _ tier», «tenault», խիստ «aud»։

Կարճ TTL-ը write վիրահատությունների համար (դեպոզիտներ/եզրակացություններ), PoP/DPoP կամ mTSA-ի համար կրիտիկական երթուղիների համար։

Կարգավորող աուդիտ 'մուտքերի/ձախողումների անփոփոխ ամսագրեր, լոգարանների պահպանում տարածաշրջանի սահմաններում։

Գործընկերները/PSA-ն ունեն առանձին բանալիներ/' aud ", բանալիների նախկին ստենանտը և առանձին JWKS-ը։

15) Չեկ-թուղթ պատրաստակամության համար

  • Կոշտ allow-list ալգորիթմներ; «none» արգելված է։
  • 'iss/aud/exp/nbf/iat/jti "ստուգվում են; կարճ «exp»։
  • JWKS-ը համընկնումով, կարճ TTL քեշով; dom 'kid "։
  • Refresh — rotate-on-use; ցուցակները 'jti/sid' s TTL; ակնարկների թուղթ։
  • PoP/DPoP կամ mTRK կրիտիկական երթուղիների վրա։
  • Windows Only-cookies զննարկչի համար, CSP/Trusted Types դեմ XIV; CSRF պաշտպանություն։
  • Առանց PII payload; կլեյմի նվազագույն հավաքածու։
  • Metriki/Logs ըստ valivation-ի, JWKS/verify _ fail ալտերտերը։
  • Բացասական փորձարկումներ ՝ RS 35HS swap, «kid 'injection,» jku' spoofing, oversize, clock-skew։

16) TL; DR

Գրեք ալգորիթմը և բանալիները սերվերի կողմում, մի վստահեք 'alg' s/aud/exp/nbf/iat/jti "։ Միացրեք ստեղները JWKS-ի միջոցով, համընկնեք կարճ, իսկ refresh-ը միանվագ է։ Պահեք հոսանքները ապահով (Windows Only-cookie), նվազեցրեք կլեյմերը, մի տեղադրեք PII-ը։ Փակեք 'jku/x5u/kid' vectors, խուսափեք HS256 թույլ գաղտնիքներից, ավելացրեք PoP/DPoP կամ mTRK-ը կրիտիկական ճանապարհների վրա և միշտ BOLA ստուգումներ կատարեք ռեսուրսների մակարդակի վրա։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։