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" }
'alg': हस्ताक्षर/एन्क्रिप्शन एल्गोरिथ्म (RS256/ES256/PS256/HS256, आदि)।
'किड': पॉइंटर टू कुंजी (JWKS रोटेशन के लिए)।
वैकल्पिक प्रमुख स्रोत: 'जकू', 'x5u' (कमजोरियां देखें) 6। 3).
2. 2 पेलोड (JSON)
मानकीकृत टिकट:- 'is' (जारीकर्ता), 'aud' (दर्शक), 'सब' (विषय)
- 'exp' (समाप्ति समय), 'nbf' (पहले नहीं), 'iat' (जारी)
- 'जेटीआई' (टोकन आईडी, प्रतिशोधी)
- डोमेन-स्टैम्प: 'स्कोप/रोल्स', 'किरायेदार', 'kyc _ level', आदि।
2. 3 हस्ताक्षर
JWS = 'साइन (base64url (हेडर) + ". + base64url (पेलोड), private_key)'
सत्यापन: कड़ाई से सार्वजनिक कुंजी और बिल्कुल वह एल्गोरिथ्म जो सर्वर को उम्मीद है।
3) बेसिक चेक इनवेरिएंट्स
1. एल्गोरिथ्म संसाधन सर्वर (अनुमति-सूची) के विन्यास द्वारा तय किया जाता है, और 'हेडर की सामग्री के साथ भरोसा नहीं किया जाता है। alg '।
2. एक सटीक मैच के लिए 'iss' और 'aud' की जाँच करें, 'exp/nbf' - छोटे 'घड़ी _ skew' (the 30-60) को ध्यान में रखते हुए।
3. 'बच्चे' के बिना इनकार टोकन केवल तभी होता है जब एक चाबी और कोई रोटेशन न हो; अन्यथा, 'बच्चे' की मांग करें।
4. वस्तु-स्तरीय प्राधिकरण (BOLA-first) के बिना किसी भी टिकट पर भरोसा न करें।
5. पार्सिंग - क्रिप्टो सत्यापन के बाद; डिकोडिंग से पहले बुनियादी आकार की जांच।
4) JWS बनाम JWE
JWS: हस्ताक्षरित लेकिन पढ़ ने योग्य पेलोड PII/रहस्य में न डालें।
JWE: एनक्रिप्ट पेलोड; एकीकरण अधिक कठिन है, प्रमुख मॉडल महत्वपूर्ण है।
अधिकांश एपीआई में, पेलोड में संवेदनशील डेटा पर जेडब्ल्यूएस + निषेध पर्याप्त है।
5) टोकन जीवन चक्र
पहुंच: अल्पावधि (5-30 मिनट)।
ताज़ा: लंबे समय तक (7-30 दिन), घूर्णन-ऑन-यूज़ (एक-समय), "ब्लैक लिस्ट" 'जेटी/सिड' रखें।
निरसन: 'jti' with TTL, अपारदर्शी टोकन के लिए आत्मनिरीक्षण, संक्षिप्त नाम 'exp' for घटनाओं को सूचीबद्ध करता है।
मुख्य रोटेशन: ओवरलैप (पुराने + नए) के साथ JWKS, लेख "कुंजी रोटेशन" देखें।
6) बार-बार कमजोरियां और उन्हें कैसे बंद करें
6. 1 'alg = कोई नहीं '/एल्गोरिथ्म प्रतिस्थापन
नीचे पंक्ति: सर्वर 'अल्ग' क्षेत्र पर भरोसा करता है और एक अहस्ताक्षरित टोकन स्वीकार करता है।
संरक्षण: सर्वर पर एल्गोरिदम की कठिन अनुमति-सूची; 'नोन' और अप्रत्याशित मूल्यों को अस्वीकार करें।
6. 2 RS256→HS256 स्वैप (सममितीकरण)
नीचे की रेखा: एक हमलावर 'alg' with की जगह लेता है - और सार्वजनिक कुंजी का उपयोग HMAC रहस्य के रूप में करता है।
संरक्षण: विन्यास के साथ एल्गोरिथ्म की कुंजी बांधना; सममित/असममित प्रदाताओं को एक 'किड' में न मिलाएं।
6. 3 कुंजी इंजेक्शन ('बच्चा/jku/x5u')
परिदृश्य:- 'jku' points एक हमलावर-नियंत्रित JWKS (इसकी कुंजी पर्ची होगी)।
- 'x5u '/' x5c' बाहरी प्रमाणपत्रों का दुरुपयोग।
- 'किडविथ/एसक्यूएल पथ इंजेक्शन ('। "/../privkey। पेम "'या' '' या 'या 1 = 1 -"')।
- मिटाए गए 'jku/x5u' या फिल्टर को सख्त अनुमति-सूची डोमेन द्वारा अनदेखा करें.
- 'kid' shold का उपयोग केवल स्थानीय निर्देशिका (तालिका/कैश) में एक कुंजी के रूप में किया जाता है, बिना फ़ाइल पथ/SQL संगोष्ठियों के।
- विश्वसनीय URL, लघु TTL, हस्ताक्षर/पिनिंग चैनल से JWKS लोड।
6. 4 HS256 के कमजोर रहस्य (क्रूर बल)
नीचे की रेखा: HMAC रहस्य छोटा/लीक हुआ → हस्ताक्षर स्पूफिंग है।
संरक्षण: केवल केएमएस में विषमता (आरएस/ईएस/पीएस) या गुप्त लंबाई ≥ 256 बिट्स, रहस्य का उपयोग करें।
6. 5 गुम/अमान्य टिकट
नो 'aud '/' is '/' exp' टोकन क्रॉस-सर्विसेबल या अनंत है।
बहुत लंबे समय तक 'एक्सपी' - समझौता का जोखिम।
सुरक्षा: निशान के पूरे सेट की आवश्यकता होती है, 'exp' शॉर्ट, 'nbf '/' iat' को 'घड़ी _ skew' के साथ मान्य किया जाता है।
6. 6 रिप्ले और टोकन चोरी
सार: टोकन का अवरोधन/पुनरावृत्ति (लॉग में रिसाव, एक्सएसएस, टीएलएस के बिना मितम)।
संरक्षण:- TLS везде, 'सुरक्षित' + 'Httponly' कुकी, SempSite = Lax/Strict।
- DPoP/PoP (एक ग्राहक कुंजी के लिए एक टोकन बाध्यकारी) और/या mTLS भागीदारों के लिए।
- शॉर्ट 'एक्सपी', रिफ्रेश-रोटेशन, डिवाइस-बाइंडिंग।
6. 7 XSS/भंडारण लीक
नीचे पंक्ति: JWT स्टोरेज 'LocalScore '/' SaurtScore' में JS के लिए उपलब्ध है।
संरक्षण: Httpown-Cookie में एक्सेस टोकन स्टोर करें (यदि कुकी मॉडल संभव है) + सख्त CSP/भरोसेमंद प्रकार।
कुकीज़के बिना एसपीए के लिए - स्मृति में टोकन को अलग करें, न्यूनतम जीएं, एक्सएसएस से बचाएं।
6. 8 सीएसआरएफ
नीचे पंक्ति: कुकी सत्र के दौरान, तीसरे पक्ष की साइट से अनुरोध।
सुरक्षा: सेसाइट, एंटी-सीएसआरएफ टोकन (डबल सबमिट), 'ओरिजिन/रेफरी' चेक, फेच-मेटाडेटा फिल्टर।
6. 9 ओवरसाइज ़/आकार का दुरुपयोग
गिस्ट: विशाल पेलोड/सुर्खियाँ, पार्सिंग पर डॉस।
संरक्षण: शीर्षक/शरीर के आकार की सीमा, प्रारंभिक-अस्वीकार 431/413, टिकटों का निश्चित सेट।
6. 10 प्रतिस्थापन 'टाइप '/' सीटी'
सार: प्रकारों का भ्रम ('टाइप: "JWT"), नेस्टेड JOSE वस्तुओं।
सुरक्षा: सुरक्षा के लिए 'टाइप/सीटी' को अनदेखा करें, निश्चित एल्गोरिदम और ब्रांडिंग योजना पर भरोसा करें।
7) टोकन भंडारण और स्थानांतरण
7. 1 सर्वर एपीआई (मशीन-टू-मशीन)
mTLS/HMAC, अधिमानतः JWT के लिए विषमता, जाल के माध्यम से चैनल।
कुंजी भंडार - केएमएस/एचएसएम, अनुसूचित रोटेशन, अतिव्यापी जेडब्ल्यूकेएस।
7. 2 ब्राउज़र क्लाइंट
Httpown सुरक्षित कुकी для पहुंच/ताज़ा; लघु टीटीएल; अपडेट - HTTPS के तहत 'SemSite = No' only के साथ "साइलेंट रिफ्रेश" के माध्यम से।
सख्त CSP, भरोसेमंद प्रकार, XSS से बचाव; एसपीए के लिए - यदि संभव हो, डिस्क पर टोकन संग्रहीत न करें।
8) JWKS, रोटेशन और रिकॉल
JWKS अधिकारी द्वारा प्रकाशित किया जाता है; उपभोक्ता 5-15 मिनट के लिए कैश करते हैं।
रोटेशन प्लान: एक नया 'बच्चा' जोड़ें - उन्हें साइन करना शुरू करें - एन दिनों के बाद पुराने को JWKS पर्स से हटा दें।
प्रतिक्रिया: TTL के साथ 'jti/sid' सूची; एक घटना के मामले में, अस्थायी रूप से 'एक्सपी' और फोर्स-लॉगआउट (निष्क्रिय रिफ्रेश) को कम करें।
9) बहु-किरायेदार और डेटा कम से कम
टोकन में 'किरायेदार '/' org' शामिल करें यदि वास्तुकला द्वारा आवश्यक हो; अन्यथा, 'sub' द्वारा पीडीपी से विशेषताओं को खींचें।
कोई पीआईआई नहीं; टिकटों का न्यूनतम सेट - लीक और सहसंबंध का कम जोखिम।
10) व्यावहारिक सत्यापन चेकलिस्ट (संसाधन सर्वर)
- हस्ताक्षर और बुनियादी आकार की सीमाओं के सत्यापन के बाद ही पारसिम।
- विन्यास से 'एल्ग'; अप्रत्याशित अस्वीकार करें।
- 'is' aud '∧' aud '∧' exp '∧' nbf '∧' iat '(' घड़ी _ skew 'के साथ) की जाँच करें।
- स्थानीय निर्देशिका/JWKS (लघु TTL) पर 'किड' की जाँच करें।
- फ़िल्टर/बाहरी बिंदुओं को सामान्य करें ('jku/x5u' - केवल अनुमति-सूची)।
- स्टांप लंबाई/संरचना (योजना) को सीमित करें।
- वस्तु संसाधन प्राधिकरण (BOLA-first) लागू करें।
- लॉग 'किड', 'सब', 'aud', '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/x5 यू' छोड़ रहा है
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 _ verfify _ fail _ total {court}', 'jwt _ expired _ total', 'jwks _ refresh _ total', доля 'kud'।
लॉग्स (संरचित): 'is/aud/sub/kud/jti/exp/trace _ id', असफलता का कारण।
डैशबोर्ड: "जल्द ही समाप्त होना", सत्यापन त्रुटियों में वृद्धि, क्षेत्र/ग्राहक द्वारा वितरण।
अलर्ट: 'सत्यापित _ फेल' (हस्ताक्षर/एल्गोरिथ्म), JWKS त्रुटियों की वृद्धि, समाप्त टोकन का हिस्सा।
13) एंटीपैटर्न
टोकन से 'अल्ग' ट्रस्ट; समर्थन 'नोन'।
लंबे समय तक रहने वाले एक्सेस टोकन और कोई रिफ्रेश रोटेशन नहीं।
HS256 केएमएस के बिना ईएनवी में एक छोटे से रहस्य/रहस्य के साथ।
किसी भी डोमेन से 'jku/x5u' स्वीकार करें; अनुमति-सूची के बिना गतिशील रूप से JWKS लोड करें।
PII/रहस्य को पेलोड JWS में रखें।
जब XSS जोखिम मौजूद हो तो 'LocalStore' में टोकन स्टोर करें।
सत्यापन त्रुटियों को दबाएँ (वापसी 200 s "सॉफ्ट त्रुटि")।
कोई BOLA जाँच नहीं करता है और केवल 'गुंजाइश/भूमिका' पर भरोसा करता है।
14) आईगेमिंग/वित्त की विशिष्टताएं
ब्रांड: 'kyc _ level', 'jist _ tier', 'किरायेदार', सख्त 'aud'।
महत्वपूर्ण मार्गों के लिए लेखन संचालन (जमा/आउटपुट), पीओपी/डीपीओपी या एमटीएलएस के लिए लघु टीटीएल।
नियामक लेखा परीक्षा: इनपुट/विफलताओं के अपरिवर्तनीय लॉग, क्षेत्र की सीमाओं के भीतर लॉग का भंडारण।
भागीदारों/पीएसपी के पास अलग-अलग कुंजी/' aud ', किरायेदार कुंजी और अलग JWKS हैं।
15) प्रोड रेडीनेस चेकलिस्ट
- एल्गोरिदम की कठिन अनुमति-सूची; 'नोन' की अनुमति नहीं है।
- 'is/aud/exp/nbf/iat/jti' की जाँच की जाती है; लघु 'एक्सपी'।
- ओवरलैप्ड JWKS, शॉर्ट TTL कैश; 'बच्चे' के शेयरों की निगरानी।
- रिफ्रेश - घूर्णन-ऑन-उपयोग; TTL के साथ 'jti/sid' लिस्ट; प्लेबुक की समीक्षा क
- महत्वपूर्ण मार्गों पर PoP/DPoP या mTLS।
- ब्राउज़र, CSP/भरोसेमंद प्रकार बनाम XSS के लिए Httponly-cookies; CSRF सुरक्षा।
- पेलोड में कोई पीआईआई नहीं; निशान का न्यूनतम सेट।
- मान्यता और विफलता मेट्रिक्स/लॉग; अलर्ट -।
- नकारात्मक परिदृश्य परीक्षण: RS→HS स्वैप, 'किड' -injections, 'jku' स्पूफिंग, ओवरसाइज़, घड़ी-तिरछा।
16) टीएल; डीआर
सर्वर साइड पर एल्गोरिथ्म और कुंजी को ठीक करें, टोकन से 'alg' पर भरोसा न करें, मांग 'is/aud/exp/nbf/iat/jti'। अतिव्यापी JWKS के माध्यम से कुंजी घुमाएं, टोकन को अल्पकालिक रखें और डिस्पोजेबल को ताज़ा करें। टोकन सुरक्षित रूप से स्टोर करें (वेब के लिए Httpony-cookie), टिकटों को कम से कम करें, PII न डालें। 'jku/x5u/kud' वैक्टर बंद करें, कमजोर रहस्यों से बचें, महत्वपूर्ण रास्तों पर PoP/DPoP या mTLS जोड़ें, और हमेशा संसाधन स्तर पर BOLA जांच करें।