ما هو JWT؟
رمز JWT سلسلة مضغوطة من ثلاثة أجزاء بترميز Base64url — header.payload.signature — تحمل مطالبات عن مستخدم أو عميل (الموضوع والأدوار والانتهاء) مع توقيع يمكن للمستقبِل التحقق منه. عُرّف في RFC 7519 مع قواعد توقيعه في RFC 7515 و7518، وهو الصيغة المعتادة لرموز وصول OAuth 2.0 ورموز هوية OpenID Connect. الحمولة مرمّزة فقط لا مشفّرة: من يملك الرمز يستطيع قراءتها.
ملاحظة أمنية: فك الترميز ليس تحققاً. يجب على الخادم فحص التوقيع بخوارزمية مثبّتة ورفض alg=none والتحقق من exp وiss وaud — والرمز الحقيقي الذي يُلصق في أي مكان يبقى سراً حتى ينتهي.
اقرأ الدليل: ما هو JWT؟ شرح رموز JSON Web Token
كيفية استخدام محلّل ترويسة JWT
- الصق رمز JWT، أو مقطع ترويسته / JSON الترويسة فقط.
- راجع الملخص لمعرفة الخوارزمية ونوع المفتاح ومراجع المفاتيح البعيدة.
- راجع تحليل المخاطر وتأكد من أن المتحقق لديك يرفض الأنماط المرصودة.
مزايا محلّل ترويسة JWT
- يشرح كل معلمة في ترويسة JOSE: alg وtyp وcty وkid وjku وjwk وx5u وx5c وx5t وcrit وenc وzip
- يصف عائلة الخوارزمية ونوع المفتاح (سرّ مشترك مقابل مفتاح عام)
- يرصد alg=none والتوقيعات الفارغة وعناوين المفاتيح البعيدة والمفاتيح المضمّنة وقيم kid الشبيهة بالحقن
- يقبل رمزاً كاملاً أو المقطع الأول فقط أو الترويسة بصيغة JSON
- مستوى خطورة إجمالي مع نتائج مرتّبة حسب الأولوية
مثال على محلّل ترويسة JWT
ترويسة تحتوي على عنوان URL لمجموعة JWK
الإدخال:
{"alg":"RS256","typ":"JWT","kid":"2026-03-key-1","jku":"https://auth.example.com/.well-known/jwks.json"}النتيجة:
High — jku (JWK Set URL) present: verifiers must only accept allow-listed hosts.
OK — RS256 (RSA public key): pin the expected algorithm to avoid HS/RS confusion.
Info — kid = 2026-03-key-1: use only to select pre-configured keys.الأسئلة الشائعة حول محلّل ترويسة JWT
ما هجوم «alg=none»؟
كانت بعض المكتبات المبكرة تقبل الرموز التي تعلن ترويستها alg بقيمة «none» وتتخطى التحقق من التوقيع كلياً، ما يتيح للمهاجمين تزوير أي حمولة. يجب أن ترفض أدوات التحقق «none» وألا تقبل سوى قائمة صريحة من الخوارزميات المسموح بها.
ما الخلط بين الخوارزميات (HS/RS)؟
إذا وثق المتحقق بقيمة alg الواردة في الترويسة، يمكن للمهاجم تغيير RS256 إلى HS256 وتوقيع الرمز باستخدام المفتاح العام للخادم (وهو عام بطبيعته) بوصفه سرّ HMAC. ثبّت الخوارزمية المتوقعة دائماً على جانب الخادم.
لماذا تُرصد ترويسات jku وx5u وjwk؟
تخبر هذه الترويسات المتحقق من أين يجلب المفتاح المستخدم لفحص التوقيع — أو تضمّنه مباشرة. فإذا اتبعها المتحقق دون تمحيص، يمكن للمهاجم تقديم مفتاحه الخاص. لا ينبغي الوثوق إلا بالمفاتيح القادمة من مخزن مُعدّ مسبقاً.
ماذا ينبغي أن يحتوي kid؟
معرّفاً مبهماً يُستخدم للبحث عن أحد المفاتيح المنشورة للجهة المُصدِرة. أما القيم التي تحتوي على فواصل مسارات أو علامات اقتباس أو مقاطع SQL فتشير إلى محاولات حقن ضد أدوات التحقق التي تستخدم kid لتحميل ملفات أو صفوف قاعدة بيانات.
ملاحظات تقنية
تستند نتائج الترويسة إلى RFC 7515/7516/7518 وإلى المخاطر التي يصفها RFC 8725: JWS غير المؤمَّن (alg none)، واستبدال الخوارزمية (كتحويل RS256 إلى HS256)، وعناوين jku/x5u التي يتبعها المتحقق دون تمحيص فتفتح الباب لتزوير الطلبات من جانب الخادم (SSRF)، وقيم kid التي تصل إلى استعلامات SQL أو LDAP دون تنقية. وترصد الأداة أيضاً مفتاح jwk المضمَّن وقيم kid الشبيهة بالمسارات، وهما طريقتان إضافيتان لدفع متحقق غير حذر إلى استخدام مفتاح المهاجم؛ وهذان فحصان استدلاليان وليسا من متطلبات RFC 8725. يتجاهل المتحقق الآمن اقتراحات الترويسة بشأن المفاتيح والخوارزميات ويستخدم إعداداته الخاصة بدلاً منها.
المراجع
- RFC 7519: JSON Web Token (JWT)يعرّف صيغة JWT — الترويسة والحمولة والتوقيع — والمطالبات المسجّلة iss وsub وaud وexp وnbf وiat وjti.
- RFC 7515: JSON Web Signature (JWS)كيف يُوقَّع JWT ويُسلسَل: الترويسة المحمية ومدخل التوقيع والتسلسل المضغوط.
- RFC 7518: JSON Web Algorithms (JWA)الخوارزميات وراء ترويسة alg: HS256/384/512 وRS256 وES256 ومتطلبات حجم المفتاح لكل منها.