GH GambleHub

JWT: ساختار و آسیب پذیری

1) JWT چیست و در کجا استفاده می شود

JWT یک ظرف ادعای خود شامل جمع و جور در فرمت 'Base64Url (هدر) است. Base64Url (payload) Base64Url (امضا)

مورد استفاده برای:
  • JWS (نشانه های امضا شده - صحت/یکپارچگی)،
  • JWE (نشانه های رمزگذاری شده - حریم خصوصی)،
  • OIDC/OAuth2 به عنوان نشانه های دسترسی/شناسه و همچنین احراز هویت سرویس به سرویس.

مزایا: استقلال، قابلیت اطمینان، سربار کم. معایب: خطر اعتبارسنجی نادرست، موارد فراخوان پیچیده.

2) ساختار JWT

2. 1 هدر (JSON)

حداقل: الگوریتم و شناسه کلیدی.

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

«alg»: الگوریتم امضا/رمزگذاری (RS256/ES256/PS256/HS256 و غیره).
'kid': اشاره گر به کلید (برای چرخش JWKS).
منابع کلیدی اختیاری: 'jku'، 'x5u' (نگاه کنید به آسیب پذیری § 6. 3).

2. 2 بارگیری (JSON)

تمبر استاندارد:
  • 'iss' (صادر کننده)، 'aud' (مخاطب)، 'sub' (موضوع)
  • 'exp' (زمان انقضا)، 'nbf' (نه قبل از)، 'iat' (صادر شده)
  • 'jti' (شناسه نشانه، قابل لغو)
  • تمبرهای دامنه: «دامنه/نقش»، «مستاجر»، «kyc _ level» و غیره

2. 3 امضا

JWS = 'علامت (base64url (header) +'. '+ base64url (payload), private_key)'

تأیید: کلید عمومی کاملاً متناظر و دقیقاً الگوریتمی که سرور انتظار دارد.

3) بررسی پایه ثابت

1. الگوریتم توسط پیکربندی سرور منبع (allow-list) ثابت شده است و با محتویات "header اعتماد ندارد. همه چیز.
2. بررسی «iss» و «aud» برای یک بازی دقیق، «exp/nbf» - با در نظر گرفتن کوچک «clock _ skew» (± 30-60).
3. توکن ها را بدون «بچه» فقط در صورت وجود یک کلید واحد و بدون چرخش رد کنید. در غیر این صورت، درخواست «بچه».
4. به تمبرهای بدون مجوز سطح شیء (BOLA-first) اعتماد نکنید.
5. تجزیه - پس از تایید رمزنگاری; بررسی اندازه اولیه قبل از رمزگشایی.

4) JWS در مقابل JWE

JWS: امضا شده اما قابل خواندن است. PII/اسرار بارگیری را وارد نکنید.
JWE: رمزگذاری محموله ؛ ادغام دشوارتر است، مدل کلیدی حیاتی است.
در اکثر API ها، ممنوعیت JWS + در داده های حساس در payload کافی است.

5) چرخه عمر توکن

دسترسی: کوتاه مدت (5-30 دقیقه).
تازه کردن: طولانی تر (7-30 روز)، چرخش در استفاده (یک بار)، نگه داشتن «لیست سیاه» 'jti/sid'.
ابطال: لیست 'jti' with TTL، خودآزمایی برای نشانه های مبهم، اختصار 'exp' برای حوادث.
چرخش کلید: JWKS با همپوشانی (قدیمی + جدید)، مقاله «چرخش کلید» را ببینید.

6) آسیب پذیری های مکرر و نحوه بستن آنها

6. 1 'alg = none '/جایگزینی الگوریتم

خط پایین: سرور به فیلد «alg» اعتماد می کند و یک توکن بدون علامت را می پذیرد.
حفاظت: لیست اجازه سخت الگوریتم ها در سرور ؛ «هیچ» و ارزش های غیر منتظره را رد کنید.

6. 2 RS256 → تعویض HS256 (تقارن)

خط پایین: یک مهاجم «alg» را با HS256 جایگزین می کند و از کلید عمومی به عنوان یک راز HMAC استفاده می کند.
حفاظت: اتصال کلید به الگوریتم با پیکربندی ؛ ارائه دهندگان متقارن/نامتقارن را در یک «kid» مخلوط نکنید.

6. 3 تزریق کلید («بچه/jku/x5u»)

سناریو ها:
  • «jku» به JWKS تحت کنترل مهاجم اشاره می کند (کلید آن را لغزش می کند).
  • 'x5u '/' x5c' استفاده از گواهینامه های خارجی.
  • 'kid' with/تزریق مسیر SQL ('.. "/../خصوصی. pem «» یا «» OR 1 = 1 - «»).
حفاظت:
  • چشم پوشی از حذف 'jku/x5u' و یا فیلتر توسط سخت اجازه لیست دامنه.
  • «kid» فقط باید به عنوان یک کلید در دایرکتوری محلی (جدول/کش)، بدون مسیرهای فایل/اتصالات SQL استفاده شود.
  • JWKS از URL های قابل اعتماد، TTL کوتاه، کانال امضا/پینینگ بارگیری می شود.

6. 4 اسرار ضعیف HS256 (نیروی بی رحم)

خط پایین: HMAC راز کوتاه است/به بیرون درز → signature spoofing.
حفاظت: استفاده از عدم تقارن (RS/ES/PS) یا طول مخفی ≥ 256 بیت، اسرار - فقط در KMS.

6. 5 تمبر گم شده/نامعتبر

No 'aud '/' iss '/' exp' → توکن قابل استفاده یا بینهایت است.
بیش از حد طولانی → خطر سازش.
حفاظت: نیاز به مجموعه ای کامل از علائم، 'exp' کوتاه، 'nbf '/' iat' اعتبار با 'clock _ skew'.

6. 6 پخش و سرقت توکن

ماهیت: رهگیری/تکرار یک نشانه (نشت در سیاهههای مربوط، XSS، MitM بدون TLS).

حفاظت:
  • TLS везде، کوکی 'Secure' + 'HttpOnly'، SameSite = Lax/Strict.
  • DPoP/PoP (اتصال یک توکن به کلید مشتری) و/یا mTLS برای شرکا.
  • کوتاه 'exp'، تازه کردن چرخش، دستگاه اتصال.

6. 7 XSS/ذخیره سازی نشت

خط پایین: ذخیره سازی JWT در 'localStorage '/' sessionStorage' → در دسترس JS است.
حفاظت: ذخیره نشانه های دسترسی در HttpOnly-cookie (اگر مدل کوکی امکان پذیر است) + انواع CSP/Trusted دقیق.
برای SPA بدون کوکی ها - رمز را در حافظه جدا کنید، حداقل زندگی کنید، در برابر XSS محافظت کنید.

6. 8 CSRF

خط پایین: در طول جلسات کوکی، درخواست از یک سایت شخص ثالث.
حفاظت: SameSite، نشانه های ضد CSRF (دو بار ارسال)، بررسی منبع/ارجاع، فیلترهای Fetch-Metadata.

6. 9 سوء استفاده بیش از حد/اندازه

Gist: payload/headlines بزرگ، DoS در تجزیه.
حفاظت: عنوان/اندازه بدن محدودیت، اوایل رد 431/413، ثابت مجموعه ای از تمبر.

6. 10 تعویض «نوع »/« نوع»

ماهیت: سردرگمی انواع ("نوع:" JWT ")، اشیاء JOSE تودرتو.
حفاظت: نادیده گرفتن «نوع/cty» برای امنیت، تکیه بر الگوریتم های ثابت و طرح نام تجاری.

7) ذخیره و انتقال توکن

7. 1 API های سرور (ماشین به ماشین)

mTLS/HMAC، ترجیحا عدم تقارن برای JWT، کانال از طریق مش.
فروشگاه کلیدی - KMS/HSM، چرخش برنامه ریزی شده، با هم تداخل دارند JWKS.

7. 2 مشتریان مرورگر

HttpOnly کوکی امن для دسترسی/تازه کردن ؛ TTL کوتاه ؛ به روز رسانی - از طریق «تازه کردن سکوت» با 'SameSite = None' only تحت HTTPS.
CSP دقیق، انواع مورد اعتماد، محافظت در برابر XSS ؛ برای SPA - در صورت امکان، نشانه را روی دیسک ذخیره نکنید.

8) JWKS، چرخش و فراخوانی

JWKS توسط نویسنده منتشر شده است ؛ مصرف کنندگان کش برای 5-15 دقیقه.
طرح چرخش: اضافه کردن یک بچه → شروع آنها را امضا → پس از N روز حذف یکی از قدیمی از JWKS → پاکسازی.
بازخورد: لیست 'jti/sid' با TTL ؛ در صورت بروز حادثه، به طور موقت «exp» و force-logout را کاهش دهید (غیرفعال کردن تازه کردن).

9) چند مستاجر و به حداقل رساندن داده ها

فقط در صورت لزوم با معماری، «مستاجر »/« org» را در نشانه قرار دهید. در غیر این صورت، ویژگی ها را از PDP توسط «sub» بکشید.
بدون PII ؛ حداقل مجموعه تمبرها → خطر نشت و همبستگی کمتر.

10) چک لیست اعتبار عملی (سرور منابع)

  • پارسیم تنها پس از تایید امضا و محدودیت اندازه اولیه.
  • 'alg' از پیکربندی ؛ موارد غیر منتظره را رد کنید.
  • بررسی 'iss' 'aud' 'exp' 'nbf' و 'iat' (با 'clock _ skew').
  • «kid» را در دایرکتوری محلی/JWKS (TTL کوتاه) بررسی کنید.
  • اشاره گرهای خارجی را فیلتر/نرمال کنید ('jku/x5u' - فقط لیست مجاز).
  • محدود کردن طول تمبر/ترکیب (طرح).
  • درخواست مجوز منابع شیء (BOLA-first).
  • ورود «بچه»، «زیر»، «aud»، «iss»، «jti»، «exp»، «مستاجر»، «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'، دلیل شکست.
داشبورد: «به زودی منقضی می شود»، افزایش خطاهای اعتبار سنجی، توزیع بر اساس منطقه/مشتری.
هشدارها: رشد 'verify _ fail' (امضا/الگوریتم)، خطاهای JWKS، سهم توکن های منقضی شده.

13) ضد گلوله

اعتماد «alg» از نشانه ؛ حمایت از «هیچ»

نشانه های دسترسی طولانی مدت و بدون چرخش تازه.
HS256 با یک راز/راز کوتاه در ENV بدون KMS.
قبول 'jku/x5u' از هر دامنه ؛ JWKS را به صورت پویا بدون لیست مجاز بارگیری کنید.
PII/اسرار را در JWS بارگیری قرار دهید.
ذخیره نشانه ها در «ذخیره سازی محلی» زمانی که خطرات XSS وجود دارد.
سرکوب خطاهای اعتبارسنجی) 200 s «خطای نرم» را برگردانید (.
هیچ BOLA چک و تنها با تکیه بر «دامنه/نقش».

14) ویژگی های iGaming/امور مالی

مارک های: «kyc _ level»، «risk _ tier»، «tenant»، «aud» دقیق.
TTL کوتاه برای عملیات نوشتن (سپرده/خروجی)، PoP/DPoP یا mTLS برای مسیرهای بحرانی.
ممیزی نظارتی: سیاهههای مربوط غیر قابل تغییر از ورودی/شکست، ذخیره سازی سیاهههای مربوط در مرزهای منطقه است.
شرکا/PSP دارای کلید های جداگانه/« aud »، کلید های مستاجر و JWKS جداگانه هستند.

15) تولید لیست آمادگی

  • Hard allow-list of algorithms; هیچ کس مجاز نیست.
  • 'iss/aud/exp/nbf/iat/jti' بررسی می شوند ؛ «exp» کوتاه است.
  • همپوشانی JWKS، کش TTL کوتاه ؛ نظارت بر سهام «کودک»
  • تازه کردن - چرخش در استفاده ؛ 'jti/sid' lists with TTL; کتاب بازی را مرور کنید.
  • PoP/DPoP یا mTLS در مسیرهای بحرانی.
  • HttpOnly-cookies برای مرورگر، انواع CSP/Trusted در مقابل XSS ؛ حفاظت CSRF
  • بدون PII در بار ؛ حداقل مجموعه ای از علائم.
  • اعتبار سنجی و معیارهای شکست/سیاهههای مربوط; هشدار JWKS/verify_fail
  • تست سناریو منفی: RS → مبادله HS، «بچه» -injections، «jku» spoofing، بزرگ، ساعت skew.

16) TL ؛ دکتر متخصص

ثابت الگوریتم و کلید در سمت سرور, اعتماد نمی 'ALG از نشانه, تقاضا' iss/aud/exp/nbf/iat/jti '. کلید ها را از طریق JWKS همپوشانی بچرخانید، نشانه ها را کوتاه مدت نگه دارید و یکبار مصرف را تازه کنید. توکنها را به طور ایمن ذخیره کنید (کوکی HttpOnly برای وب)، تمبرها را به حداقل برسانید، PII را قرار ندهید. بردارهای «jku/x5u/kid» را ببندید، از HS256 با اسرار ضعیف جلوگیری کنید، PoP/DPoP یا mTLS را در مسیرهای بحرانی اضافه کنید و همیشه چک های BOLA را در سطح منابع انجام دهید.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.