فريق العمل المشترك: الهيكل ومواطن الضعف
1) ما هو JWT وأين يتم استخدامه
JWT هي حاوية مطالبات مدمجة قائمة بذاتها بتنسيق Base64Url (رأس). Base64Url (الحمولة). Base64Url (توقيع) '.
تستخدم في:- JWS (الرموز الموقعة - الأصالة/النزاهة)،
- JWE (الرموز المشفرة - الخصوصية)،
- OIDC/OAuth2 كرموز للوصول/الهوية بالإضافة إلى مصادقة الخدمة إلى الخدمة.
الإيجابيات: الاستقلالية، القابلية للتخزين المؤقت، انخفاض النفقات العامة. السلبيات: خطر التحقق غير الصحيح، حالات الاستدعاء المعقدة.
2) هيكل JWT
2. 1 رأسية (جون)
الحد الأدنى: خوارزمية ومعرف رئيسي.
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 (حمولة)، private_key)'
التحقق: المفتاح العام المقابل بدقة والخوارزمية التي يتوقعها الخادم.
3) ثنائيات الفحص الأساسية
1. يتم تثبيت الخوارزمية من خلال تكوين خادم الموارد (قائمة السماح)، ولا يتم الوثوق بمحتويات «الرأس». alg '.
2. تحقق من «iss' و» aud' للحصول على تطابق دقيق، «exp/nbf» - مع الأخذ في الاعتبار «الساعة _ الانحراف» الصغيرة (± 30-60).
3. رفض الرموز بدون «طفل» فقط إذا كان هناك مفتاح واحد ولا دوران ؛ خلاف ذلك، اطلب «طفل».
4. لا تثق في أي طوابع بدون إذن على مستوى الكائن (BOLA-first).
5. التحليل - بعد التحقق من التشفير ؛ فحص الحجم الأساسي قبل فك التشفير.
4) JWS vs JWE
JWS: موقع ولكن يمكن قراءته. لا تضع حمولة PII/أسرار.
JWE: تشفير الحمولة ؛ التكامل أكثر صعوبة، والنموذج الرئيسي حاسم.
في معظم واجهات برمجة التطبيقات، يكفي حظر JWS + على البيانات الحساسة في الحمولة.
5) دورة حياة رمزية
الوصول: قصير الأجل (5-30 دقيقة).
التحديث: أطول (7-30 يومًا)، بالتناوب عند الاستخدام (لمرة واحدة)، احتفظ بـ "القائمة السوداء" "jti/sid'.
الإلغاء: يسرد «jti» باستخدام TTL، واستبطان الرموز غير الشفافة، واختصار «exp» للحوادث.
التناوب الرئيسي: JWKS مع التداخل (القديم + الجديد)، انظر المقالة «تدوير المفتاح».
6) نقاط الضعف المتكررة وكيفية إغلاقها
6. 1 'alg = لا شيء '/استبدال الخوارزمية
خلاصة القول: الخادم يثق في المجال «alg» ويقبل رمزًا غير موقع.
الحماية: قائمة صلبة للسماح بالخوارزميات الموجودة على الخادم ؛ رفض «لا شيء» والقيم غير المتوقعة.
6. 2 مبادلة RS256→HS256 (تناظر)
خلاصة القول: يستبدل المهاجم كلمة «alg» HS256 ويستخدم المفتاح العام كسر HMAC.
الحماية: ربط مفتاح الخوارزمية بالتكوين ؛ لا تخلط مقدمي الخدمات المتماثلين/غير المتماثلين في «طفل» واحد.
6. 3 حقن المفتاح («طفل/jku/x5u»)
السيناريوهات:- يشير jku إلى JWKS الذي يسيطر عليه المهاجم (سوف ينزلق مفتاحه).
- استخدام «x5u »/« x5c» للشهادات الخارجية.
- «kid' مع حقن مسار/SQL (».. "/../privkey. pem' or '' OR 1 = 1 - "').
- تجاهل «jku/x5u» المحذوف أو المرشح بواسطة نطاقات قائمة السماح الصارمة.
- يجب استخدام "kid' فقط كمفتاح في الدليل المحلي (الجدول/المخبأ)، بدون مسارات ملفات/توصيفات SQL.
- حمولة JWKS من عناوين URL موثوقة، TTL قصيرة، قناة توقيع/تثبيت.
6. 4 أسرار HS256 الضعيفة (القوة الغاشمة)
خلاصة القول: سر HMAC قصير/مسرب → انتحال التوقيع.
الحماية: استخدام عدم التماثل (RS/ES/PS) أو الطول السري ≥ 256 بت، أسرار - فقط في KMS.
6. 5 طوابع مفقودة/غير صالحة
لا يمكن استخدام رمز → 'aud'/' is '/' exp' أو اللانهائي.
طويل جدًا → خطر التسوية.
الحماية: تتطلب مجموعة كاملة من العلامات، "exp" قصيرة، "nbf "/" iat' التحقق من الصحة مع" الساعة _ الانحراف ".
6. 6 سرقة الإعادة والرمز
الجوهر: اعتراض/تكرار رمز (تسرب في جذوع الأشجار، XSS، MitM بدون TLS).
الحماية:- TLS везде، ملف تعريف ارتباط «آمن» + «HttpOnly»، SameSite = Lax/Strict.
- DPoP/POP (ربط رمز بمفتاح العميل) و/أو mTLS للشركاء.
- قصير «exp»، تحديث-دوران، ربط الجهاز.
6. 7 تسريبات XSS/التخزين
خلاصة القول: تخزين JWT في «التخزين المحلي »/« التخزين» متاح → لـ JS.
الحماية: رموز الوصول إلى المتجر في HttpOnly-cookie (إذا كان نموذج ملفات تعريف الارتباط ممكنًا) + أنواع CSP/الموثوق بها الصارمة.
بالنسبة إلى SPA بدون ملفات تعريف الارتباط - عزل الرمز في الذاكرة، وعش بالحد الأدنى، واحمي من XSS.
6. 8 CSRF
خلاصة القول: أثناء جلسات ملفات تعريف الارتباط، طلبات من موقع طرف ثالث.
الحماية: SameSite، رموز مضادة لـ CSRF (إرسال مزدوج)، فحص «Origin/Referer»، مرشحات Getch-Metadata.
6. 9 إساءة استخدام الحجم/الحجم
الجوهر: حمولة ضخمة/عناوين رئيسية، DoS على التحليل.
الحماية: حدود العنوان/حجم الجسم، الرفض المبكر 431/413، مجموعة ثابتة من الطوابع.
6. 10 الاستبدال 'typ '/' cty'
الجوهر: ارتباك الأنواع ("typ:" JWT ")، أجسام JOSE المتداخلة.
الحماية: تجاهل «typ/cty» للأمان، والاعتماد على خوارزميات ثابتة ونظام العلامات التجارية.
7) تخزين الرموز ونقلها
7. 1 واجهة برمجة تطبيقات الخادم (من آلة إلى آلة)
mTLS/HMAC، ويفضل عدم التناسق لـ JWT، قنوات عبر الشبكة.
المتجر الرئيسي - KMS/HSM، التناوب المقرر، JWKS المتداخل.
7. 2 عملاء المتصفح
HttpOnly Secure Cookie для access/refresh; TTL قصيرة ؛ تحديث - عبر «تحديث صامت» باستخدام «SameSite = None» فقط تحت HTTPS.
الصارم CSP، الأنواع الموثوقة، الحماية من XSS ؛ بالنسبة لـ SPA - إذا أمكن، لا تخزن الرمز على القرص.
8) JWKS، التناوب والاستدعاء
ويقوم المرخص بنشرها ؛ يخبئ المستهلكون لمدة 5-15 دقيقة.
خطة التناوب: أضف «طفلًا» جديدًا لبدء التوقيع → → بعد أيام من إزالة الشخص القديم من تطهير → JWKS.
ردود الفعل: قوائم "jti/sid' مع TTL ؛ في حالة وقوع حادث، تقلل مؤقتًا من 'exp' و 'force-logout (تحديث تعطيل).
9) التقليل من البيانات والمستأجرين المتعددين
إدراج 'المستأجر '/' org' في الرمز فقط إذا لزم الأمر بواسطة الهندسة المعمارية ؛ خلاف ذلك، اسحب السمات من PDP بواسطة «sub».
لا توجد مؤشرات لأسعار الاستهلاك ؛ مجموعة دنيا من الطوابع → مخاطر أقل للتسرب والارتباط.
10) قائمة التحقق العملية المرجعية (خادم الموارد)
- التحليل فقط بعد التحقق من حدود التوقيع والحجم الأساسي.
- 'alg' من التشكيل ؛ رفض غير متوقع.
- فحص 'is' ∧' aud' ∧ 'exp' ∧ 'nbf' ∧ 'iat' (مع' الساعة _ الانحراف ').
- تحقق من '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/exant/trace _ id'، سبب الفشل.
لوحات القيادة: «تنتهي صلاحيتها قريبًا»، زيادة في أخطاء التحقق من الصحة، والتوزيع حسب المنطقة/العميل.
التنبيهات: نمو «التحقق _ الفشل» (التوقيع/الخوارزمية)، أخطاء JWKS، حصة الرموز المنتهية الصلاحية.
13) أنتيباترن
ثق «alg» من رمز ؛ دعم «لا أحد».
رموز وصول طويلة الأمد ولا دوران تحديث.
HS256 بسر/سر قصير في ENV بدون KMS.
قبول «jku/x5u» من أي مجال ؛ تحميل JWKS ديناميكيًا دون قائمة السماح.
ضع PII/الأسرار في حمولة JWS.
تخزين الرموز في «التخزين المحلي» عند وجود مخاطر XSS.
قمع أخطاء التحقق (إرجاع 200 s «خطأ ناعم»).
لا يوجد BOLA يتحقق ويعتمد فقط على «النطاق/الدور».
14) تفاصيل iGaming/Finance
العلامات التجارية: «kyc _ level'،» risk _ tier «،» المستأجر «،» aud' الصارم.
TTL القصيرة لعمليات الكتابة (الودائع/النواتج) أو برنامج البرامج/برنامج العمل أو نظام النقل الطرقي للطرق الحرجة.
المراجعة التنظيمية: سجلات غير قابلة للتغيير للمدخلات/الإخفاقات، وتخزين جذوع الأشجار داخل حدود المنطقة.
لدى الشركاء/PSP مفاتيح/" aud' منفصلة ومفاتيح مستأجرة و JWKS منفصلة.
15) قائمة التحقق من الاستعداد
- قائمة صعبة للسماح بالخوارزميات ؛ «لا أحد» غير مسموح به.
- فحص iss/aud/exp/nbf/iat/jti '؛ اختصار «exp».
- متداخلة JWKS، مخبأ TTL قصير ؛ رصد مشاركة الأطفال.
- التحديث - التناوب عند الاستخدام ؛ 'jti/sid' القوائم مع TTL ؛ دليل المراجعة.
- برنامج عمل/برنامج عمل ديربان أو نظام نقل المواد الكيميائية على الطرق الحرجة.
- ملفات تعريف الارتباط httpOnly للمتصفح، CSP/الأنواع الموثوقة مقابل XSS ؛ حماية CSRF.
- لا يوجد مؤشر استثمار دولي في الحمولة ؛ مجموعة دنيا من العلامات.
- مقاييس/سجلات التحقق والفشل ؛ تنبيهات JWKS/verify_fail.
- اختبارات السيناريو السلبية: مبادلة RS→HS، «طفل» - إنجازات، انتحال «jku»، كبير الحجم، انحراف الساعة.
16) TL ؛ د
قم بإصلاح الخوارزمية والمفاتيح الموجودة على جانب الخادم، ولا تثق في «alg» من الرمز المميز، واطلب «iss/aud/exp/nbf/iat/jti». قم بتدوير المفاتيح من خلال JWKS المتداخلة، واحتفظ بالرموز قصيرة العمر وتحديثها للتخلص منها. تخزين الرموز بأمان (HttpOnly-cookie للويب)، تقليل الطوابع، لا تضع PII. قم بإغلاق ناقلات "jku/x5u/kid'، وتجنب HS256 بأسرار ضعيفة، وإضافة PoP/DPoP أو mTLS على المسارات الحرجة، وقم دائمًا بفحص BOLA على مستوى الموارد.