Logo GH

JWT: מבנה ופגיעות

1) מהו JWT והיכן משתמשים בו

JWT הוא מיכל תביעות עצמאי קומפקטי בפורמט Base64Url (כותרת). Base64Url (מטען). Base64Url (חתימה) ".

משמש ל:
  • JWS (אסימונים חתומים - אותנטיות/שלמות),
  • JWE (אסימונים מוצפנים - פרטיות),
  • OIDC/OAuth2 כמו אסימוני גישה/תעודת זהות כמו גם אימות שירות לשירות.

מקצוענים: אוטונומיה, קבילות, תקורה נמוכה. חסרונות: סיכון לאימות שגוי, מקרי החזרה מורכבים.

2) מבנה JWT

2. כותרת 1 (JSON)

מינימום: אלגוריתם ומזהה מפתח.

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

אלגוריתם חתימה/הצפנה (RS256/ES256/PS256/HS256, וכו ').
מצביע למפתח (לסיבוב JWKS).
מקורות מפתח אופציונליים: 'jku', 'x5u' (ראה נקודות תורפה # 6. 3).

2. 2 מטען (JSON)

בולים סטנדרטיים:
  • 'iss' (שליח),' ad '(קהל),' sub '(נושא)
  • 'exp' (זמן תפוגה), 'nbf' (לא לפני), 'iat' (הנפיק)
  • 'Jti' (תעודת זהות סמלית, ביטול)
  • חותמות דומיין: ”היקף/תפקידים”, ”דייר”, ”kyc _ level” וכו '.

2. 3 חתימה

JWS = 'sign (base64url (header) +. ”+ base64url (payload), private_key)”

אימות: מפתח ציבורי מתאים בדיוק ובדיוק האלגוריתם שהשרת מצפה לו.

3) סימון אינווריאנטים בסיסיים

1. האלגוריתם קבוע על ידי ההגדרות של שרת המשאבים (low-list), ולא ניתן לסמוך על התוכן של ”header”. אלג '.
2. בדוק אם יש התאמה מדויקת, ”exp/nbf” - אם לוקחים בחשבון את ”השעון הקטן _ skew” (שנות ה ־ 30-60).
3. למנוע אסימונים בלי ”ילד” רק אם יש מפתח אחד ולא סיבוב; אחרת, לדרוש 'ילד'.
4. אל תסמוך על בולים ללא אישור רמת אובייקט (BOLA-first).
5. אימות קריפטו לאחר ניתוחים; בדיקות גודל בסיסיות לפני פענוח.

4) JWS נגד JWE

חתום אך ניתן לקריאה. אל תשים מטען PII/סודות.
JWE: הצפנת מטען; אינטגרציה היא קשה יותר, מודל המפתח הוא קריטי.
ברוב ה-API, איסור JWS + על מידע רגיש במטען הוא מספיק.

5) מחזור חיים סמלי

גישה: לטווח קצר (5-30 דקות).
רענון: ארוך יותר (7-30 יום), סיבוב-על-שימוש (באופן חד-פעמי), שמור את "הרשימה השחורה" "jti/sid'.
ביטול: רשימות 'jti' with TTL, introspection עבור אסימונים אטומים, קיצור 'expp' עבור אירועים.
סיבוב מפתח: JWKS עם חפיפה (ישן + חדש), ראה המאמר ”סיבוב מפתח”.

6) נקודות תורפה וכיצד לסגור אותן

6. 1 &osposcallg = אין החלפת אלגוריתם '/

שורה תחתונה: השרת סומך על שדה ה ”אלג” ומקבל אסימון לא חתום.
הגנה: רשימה קשה של אלגוריתמים בשרת; דוחה 'none' וערכים בלתי צפויים.

6. 2 RS256 * החלפת HS256 (סימטריזציה)

שורה תחתונה: תוקף מחליף 'alg' with HS256 ומשתמש במפתח הציבורי כסוד HMAC.
הגנה: לקשור את המפתח לאלגוריתם עם תצורה; לא לערבב ספקים סימטריים/אסימטריים באחד.

6. 3 הזרקת מפתח (”kid/jku/x5u”)

תרחישים:
  • 'JKU' מצביע JWKS (יחליק המפתח שלה).
  • x5u/x5 'c שימוש לרעה בתעודות חיצוניות.
  • 'kid' with/SQL הזרקת נתיב ('.. "//פריקי. pem 'or' OR '1 = 1 -').
הגנה:
  • התעלם מ ־ jku/x5u או מסנן על ־ ידי תחומים המחמירים ברשימה.
  • 'Kid' schid' ll לשמש רק כמפתח בספרייה המקומית (שולחן/מטמון), ללא שבילי קובץ/קונקטורות SQL.
  • טעינת JWKS מכתובות נאמנות, TTL קצר, ערוץ חתימה/פינג.

6. 4 סודות חלשים של HS256 (כוח גס)

שורה תחתונה: סוד HMAC הוא זיוף חתימה קצר/דלף.
הגנה: השתמש באסימטריה (RS/ES/PS) או באורך סודי של 256 סיביות, סודות - רק ב ־ KMS.

6. 5 בולים חסרים/לא תקפים

לא 'Aud'/' is '/' exp' אסימון הוא חוצה שירות או אינסופי.
סיכון ארוך מדי לפשרה.
הגנה: דרוש סט מלא של סימנים, ”exp” קצר, ”nbf ”/” iat” לאמת עם ”שעון _ skew”.

6. 6 שידור חוזר וגניבת סמלים

תמצית: יירוט/חזרה של אסימון (דליפה ביומנים, XSS, MITM ללא TLS).

הגנה:
  • עוגיית ”Secure” + ”HttpOnly”, אתר חפירה = Lax/Strict.
  • DPoP/PoP (קשירת אסימון למפתח לקוח) ו/או mTLS לשותפים.
  • קיצור ”exp”, רענון-סיבוב, התקן מחייב.

6. 7 דליפות XSS/אחסון

שורה תחתונה: אחסון JWT ב ־ ”אחסון ”/” אחסון ” זמין ל ־ JS.
הגנה: אסימוני גישה לחנות ב-HttpOnly-Cookie (אם מודל העוגיות אפשרי) + CSP/Trust Types.
עבור ספא ללא עוגיות - לבודד את האסימון בזיכרון, לחיות באופן מינימלי, להגן מפני XSS.

6. 8 CSRF

השורה התחתונה: במהלך פגישות עוגיות, בקשות מאתר צד שלישי.
הגנה: Survide Site, anti-CSRF tokens (הגשה כפולה), 'Origin/Referer' check, Fetch-Metadata filters.

6. 9 ניצול יתר של גודל/גודל

מטען/כותרות ענק, DOS על ניתוחים.
הגנה: הגבלת גודל הכותרת/גוף, דחייה מוקדמת 431/413, סט קבוע של בולים.

6. 10 הצבה "typ "/" cty&fs

מהות: בלבול של סוגים (”Typ: JWT”), אובייקטים מקוננים של חוזה.
הגנה: להתעלם ”Tip/Cty” לאבטחה, להסתמך על אלגוריתמים קבועים ותוכניות מיתוג.

7) אחסון והעברה

7. 1 APIs שרת (מכונה אל מכונה)

MTLS/HMAC, עדיף אסימטריה עבור JWT, ערוצים דרך רשת.
חנות מפתחות - KMS/HSM, סיבוב מתוכנן, JWKS חופף.

7. 2 לקוחות דפדפן

עוגייה מאובטחת HTTPLY Assess Access/Ranuh; קיצור TL; עדכון באמצעות ”רענון שקט” עם ”אתר חנייה” אף אחד לא תחת HTTPS.
CSP קפדן, טיפוסים מהימנים, להגן מפני XSS; לספא - אם אפשר, אל תאחסן את האסימון בדיסק.

8) JWKS, סיבוב והיזכרות

JWKS פורסם על ידי האישור; מטמון צרכנים במשך 5-15 דקות.
תכנית סיבוב: הוסף 'ילד' חדש. תתחיל אותם חתימה. = לאחר N ימים להסיר את הישן מטיהור JWKS.
משוב: רשימות jti/sid עם TTL; במקרה של תקרית, להפחית באופן זמני 'exp' ו-loading-out (רענון לנטרול).

9) ריבוי דיירים ומזעור נתונים

כלול ”דייר ”/” org” באסימון רק אם יש צורך בארכיטקטורה; אחרת, למשוך את התכונות מ PDP by 'sub.
אין מח "ש; מינימום של בולים = פחות סיכון לדליפות וקורלציה.

10) רשימת אימות מעשית (שרת משאבים)

[ ] פרסים רק לאחר אימות של חתימה ומגבלות גודל בסיסיות.
[ ] ”אלג” מהתצורה; לדחות את הבלתי צפויים.
[ ] Check 'is' is' is' ud' d' id' ud' d' exp' nbf 'iat' (עם ”שעון _ skew”).
[ ] בדוק בספרייה המקומית/JWKS (בקיצור TTL).
[ ] מסנן/מנרמל עצות חיצוניות ('jku/x5u' -רשימה חופשית בלבד).
[ ] הגבלת אורך בול/קומפוזיציה (scheme).
[ ] Object Resource Authority (BOLA-First).
[ ] בול עץ 'ילד', 'תת', 'אוד', 'is',' 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&fs

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

11. 3 רשימת משוב לדוגמה (רדיס)

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

12) יכולת תצפית ושכיחות

”jwt _ verience _ fall _ total _ reason”, ”jwt _ fied _ total”, ”jwks _ runh _ total”.
לוגים (מובנים): 'is/aud/sub/kid/jti/exp/trace _ id', סיבה לכישלון.
לוחות מחוונים: ”פג תוקף בקרוב”, נחשול בשגיאות אימות, הפצה על ידי אזור/לקוח.
התראות: גידול של 'veriation _ fall' (חתימה/אלגוריתם), שגיאות JWKS, שיתוף אסימונים שפג תוקפם.

13) תרופות אנטי ־ פטריות

אמון 'alg' מסמל; תמיכה 'none'.
אסימוני גישה ארוכי חיים ולא סיבוב רענון.
HS256 עם סוד/סוד קצר ללא KMS.
קבל 'jku/x5u' מכל תחום; באופן דינמי להעמיס JWKS ללא הרשאות רשימה.
שים סודות פיי-איי-איי במטען JWS.
לאחסן אסימונים ב ”אחסון” כאשר קיים סיכון XSS.
דיכוי שגיאות אימות (החזר 200 S ”שגיאה רכה”).
אין בדיקת בולה והסתמכות רק על ”היקף/תפקיד”.

14) פרטים של iGaming/Finance

מותגים: "kyc _ level", "סיכון _ tier", "דייר", "aud' קפדני.
TTL קצר לפעולות כתיבה (מרבצים/יציאות), PoP/DPoP או mTLS למסלולים קריטיים.
ביקורת רגולטורית: יומנים בלתי ניתנים לשינוי של כניסות/כשלים, אחסון יומנים בתוך גבולות האזור.
לשותפים/PSP יש מפתחות נפרדים, מפתחות דייר ו ־ JWKS נפרדים.

15) רשימת מוכנות למומחים

[ ] קשה לאפשר רשימה של אלגוריתמים; ”אף אחד” אסור.
[ בודקים את ]/aude/exp/nbf/iat/jti; קיצור 'exp'.
[ ] חפפו את JWKS, מטמון TTL קצר; ניטור מניות 'ילד'.
[ ] רענון - לסובב-על-שימוש; 'jti/sid' lists עם TTL; ספר המהלכים.
[ ] PoP/DPoP או mTLS במסלולים קריטיים.
[ ] Httpally-cookies לדפדפן, CSP/Trust Types vs. XSS; הגנת CSRF.
[ ] אין מח "ש במטען; מינימום של סימנים.
[ ] אימות וכישלון מדדים/יומנים; מתריע JWKS/verify_fail.

בדיקות תרחיש שליליות: RS = החלפת HS, "ילד" - התלבטויות, "jku 'hoffing, גדול מדי, מחליק שעון.

16) TL; DR

תקן את האלגוריתם והמפתחות בצד השרת, אל תסמוך על ”alg” מהאסימון, ודרוש 'is/aud/exp/nbf/iat/jti'. לסובב מפתחות דרך JWKS חופפים, לשמור אסימונים קצר חיים ולרענן חד פעמי. לאחסן אסימונים באופן בטוח (HttpOnly-Cookie for the Web), למזער בולים, לא לשים PII. סגור 'jku/x5u/kild' וקטורים, להימנע HS256 עם סודות חלשים, להוסיף PoP/DPoP או mTLS על מסלולים קריטיים, ותמיד לעשות בדיקות בולה ברמת המשאב.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.