JWT security: সাধারণ ভুল ও এড়ানোর উপায়
JWT সর্বত্র আছে, ভুলও তাই। JWT আসলে কী গ্যারান্টি দেয় এবং কোন checklist একে নিরাপদ রাখে, জানুন।

JSON Web Token (JWT) তিন অংশের একটি ছোট string: header, payload (user ID ও expiry-র মতো claim) এবং signature। Server token-এ সই করে, পরে signature যাচাই করে database lookup ছাড়াই claim বিশ্বাস করে।
JWT কী দেয় আর কী দেয় না
- এটি প্রমাণ করে token key-ধারী কেউ সই করেছে, আর বদলানো হয়নি।
- এটি কনটেন্ট লুকায় না। Payload শুধু Base64 encoded, যে কেউ পড়তে পারে। এতে কখনো গোপন কিছু রাখবেন না।
- এটি নিজে বাতিল করা যায় না। User logout করলে বা ban হলেও মেয়াদ শেষ পর্যন্ত এটি বৈধ।
সাধারণ ভুল
১. header-এর algorithm বিশ্বাস করা। কিছু library আগে alg: none (signature নেই) নিত বা token-কে algorithm বাছতে দিত। সমাধান: server অনুমোদিত algorithm ঠিক করে দেয় এবং বাকি সব প্রত্যাখ্যান করে।
২. Algorithm confusion। RS256 token-কে public key দিয়ে HMAC secret-এর মতো যাচাই করা। সমাধান: algorithm পিন করুন, আর কাজ অনুযায়ী আলাদা key রাখুন।
৩. দুর্বল বা ডিফল্ট signing secret। ছোট বা অনুমানযোগ্য HMAC secret offline brute-force করা যায়। সমাধান: secret manager থেকে লম্বা random secret (৩২+ byte) বা asymmetric key ব্যবহার করুন।
৪. Expiry নেই বা খুব লম্বা। চুরি যাওয়া token চিরকাল চলে। সমাধান: স্বল্পস্থায়ী access token (যেমন ৫ থেকে ১৫ মিনিট) ও বাতিল করা যায় এমন refresh token।
৫. Claim যাচাই বাদ দেওয়া। সবসময় exp (মেয়াদ), iss (issuer), aud (audience) ও দরকারে nbf যাচাই করুন।
৬. Browser-এ খারাপভাবে রাখা। localStorage-এ রাখলে যেকোনো XSS চুরি করতে পারে। HttpOnly, Secure, SameSite cookie JavaScript থেকে দূরে রাখে, কিন্তু তখন CSRF থেকে রক্ষা করতে হবে।
৭. Authorization-এ token-এর data অনেকক্ষণ বিশ্বাস করা। Payload-এর role মেয়াদ শেষ পর্যন্ত পুরোনো থাকে। Token ছোট রাখুন বা গুরুত্বপূর্ণ permission server-এ যাচাই করুন।
৮. Payload-এ সংবেদনশীল data রাখা। মনে রাখুন এটি পড়া যায়।
বাতিল করার উপায়
- ছোট expiry ও server-এ রাখা refresh token।
- বাতিল token ID-র (
jti) denylist, মেয়াদসহ। - User record-এ token-এর version: বদলালে সব token বাতিল।
JWT আদৌ দরকার কি?
এক backend-এর সাধারণ ওয়েব অ্যাপে server-side session (HttpOnly cookie-তে random ID) সহজ এবং বাতিল করা সহজ। JWT ভালো service-থেকে-service call ও স্বল্পস্থায়ী delegated access-এ, প্রতিটি login-এর ডিফল্ট হিসেবে নয়।
Checklist
- Algorithm ও key server-এ allow-list করুন।
- শক্ত secret বা asymmetric key, নিয়মিত বদলানো।
- ছোট expiry, বাতিলযোগ্য refresh।
exp,iss,audযাচাই।- Payload-এ গোপন কিছু নয়।
- CSRF সুরক্ষাসহ HttpOnly cookie, অথবা খুব ছোট in-memory token।
মূল কথা: JWT প্রমাণ করে কে সই করেছে, এখনও বৈধ কি না নয়। Algorithm পিন করুন, token স্বল্পস্থায়ী রাখুন, আর শুধু login দরকার হলে session ব্যবহার করুন।
ওয়েব সিকিউরিটি সিরিজ, পর্ব ২ (আরও bug শ্রেণি ও hardening): 1 নম্বর (মোট 6)।
