چرا بسیاری از مردم استفاده از JWT را توصیه نمی کنند؟

Summarize this content to 400 words in Persian Lang
توکن های وب JSON (JWT) به دلیل سادگی و ماهیت بدون حالت به طور گسترده ای برای احراز هویت در برنامه های کاربردی وب مورد استفاده قرار گرفته اند. آنها امکان انتقال اطلاعات تایید شده بین دو طرف را می دهند که اغلب در سیستم های ورود استفاده می شود. با این حال، با وجود محبوبیت آنها، بسیاری از کارشناسان امنیتی توصیه می کنند هنگام استفاده از JWT ها، به ویژه برای مدیریت جلسه، احتیاط کنید.
در این مقاله، دلایلی را بررسی خواهیم کرد که چرا JWT ها نگرانی هایی را ایجاد کرده اند، و چرا بسیاری از توسعه دهندگان رویکردهای جایگزین را توصیه می کنند.
JWT چیست؟
JSON Web Token (JWT) یک روش فشرده و ایمن برای نشان دادن ادعاهای منتقل شده بین دو طرف است. به صورت دیجیتالی امضا شده است، که باعث می شود دستکاری آن مشهود باشد. ساختار معمولی JWT شامل سه بخش است:
Header: الگوریتم امضا را مشخص می کند.
Payload: حاوی ادعاها یا داده ها است.
امضا: هش هدر و بار برای اطمینان از یکپارچگی.
JWT ها اغلب برای احراز هویت استفاده می شوند. هنگامی که کاربر وارد سیستم می شود، سرور یک JWT صادر می کند که مشتری ذخیره می کند و به درخواست های آینده برای منابع ایمن متصل می کند. سرور برای احراز هویت کاربر، رمز را تأیید می کند، بدون اینکه نیازی به نگهداری داده های جلسه روی سرور باشد.
پس چرا بسیاری از مردم توصیه می کنند از JWT استفاده نکنید؟
1. اندازه JWT: بزرگتر از آن چیزی است که فکر می کنید
یکی از بارزترین معایب استفاده از JWT اندازه آن است. JWT ها بار خود را حمل می کنند (از جمله ادعاهایی مانند شناسه کاربر، نقش ها و غیره)، که به این معنی است که به طور قابل توجهی بزرگتر از کوکی های جلسه سنتی هستند.
یک کوکی جلسه که یک شناسه کاربری را ذخیره می کند ممکن است فقط چند بایت باشد.با این حال، JWT شامل شناسه کاربر به همراه متادیتای اضافی، محموله و یک امضا است که آن را بسیار بزرگتر می کند.این اندازه اضافی منجر به استفاده از پهنای باند بالاتر می شود زیرا توکن با هر درخواست ارسال می شود. این می تواند به ویژه در موقعیت های با پهنای باند کم یا در دستگاه های تلفن همراه مشکل ساز باشد.
2. Revocation Token: یک مشکل امنیتی عمده
یکی از مهمترین محدودیتهای JWTها عدم لغو آسان توکن است. هنگامی که JWT صادر شد، تا زمان انقضای آن معتبر باقی می ماند، که می تواند خطرات امنیتی ایجاد کند.
مشکل خروج:هنگامی که یک کاربر از سیستم خارج می شود، انتظار دارید که جلسه فوراً باطل شود. اما JWT ها بدون حالت هستند، و سرور هیچ راه مستقیمی برای باطل کردن یک توکن ندارد، مگر اینکه در جایی در سمت سرور ذخیره شده باشد، که هدف از بدون تابعیت بودن JWT را از بین می برد. اگر یک JWT زمان انقضای طولانی داشته باشد، مهاجم می تواند حتی پس از خروج کاربر از توکن دزدیده شده استفاده کند.
نشانه های قدیمی:در یک سیستم جلسه سنتی، زمانی که امتیازات یک کاربر به روز می شود (به عنوان مثال، یک مدیر به یک کاربر معمولی تنزل می یابد)، جلسه روی سرور می تواند بلافاصله آن تغییر را منعکس کند. با JWT ها، این اتفاق نمی افتد تا زمانی که توکن منقضی شود. این می تواند به کاربر اجازه دهد تا امتیازات قدیمی را برای مدت طولانی تر از آنچه در نظر گرفته شده حفظ کند، که منجر به مشکلات امنیتی بالقوه می شود.
3. امضاهای اضافی
JWT ها اغلب به دلیل قابلیت امضای دیجیتالی مورد ستایش قرار می گیرند و تضمین می کنند که محموله دستکاری نشده است. با این حال، چارچوبهای وب مدرن بهطور خودکار کوکیهای جلسه را امضا و ایمن میکنند، که امضای JWT را در بسیاری از موارد زائد میکند.
مشکل اینجاست:
اگر از JWT ها در یک کوکی استفاده می کنید، کوکی های شما قبلاً امضا شده و گاهی اوقات حتی توسط چارچوب رمزگذاری شده است.داشتن امضای کوکی و JWT بسیار زیاد است.در عمل، استفاده از کوکیهای جلسه سنتی همان سطح امنیت JWT را به شما میدهد، اما بدون پیچیدگی و اندازه اضافی.
4. آسیب پذیری های امنیتی
JWT ها اغلب رمزگذاری نمی شوند. این بدان معناست که بار، که حاوی اطلاعات حساس کاربر است، با base64 رمزگذاری شده است اما پنهان نیست. اگر کسی بتواند توکن را رهگیری کند، به راحتی میتواند محتویات آن را رمزگشایی کند.
آسیب پذیری در شرایط خاص:حملات Man-in-the-Middle: اگر JWT از طریق HTTPS منتقل نشود، مهاجم می تواند توکن را رهگیری کند و به جلسه کاربر دسترسی پیدا کند.دستکاری توکن: در حالی که امضا تضمین میکند که توکن دستکاری نشده است، هنگام استفاده از الگوریتمهای امضای ضعیف مشکلاتی به وجود میآیند. در برخی موارد، مهاجمان توانستهاند امضاهای JWT را با حملات جعل الگوریتم دور بزنند که منجر به نقض شدید امنیت میشود.برای کاهش این مشکلات، بسیار مهم است که همیشه از HTTPS و الگوریتمهای امضای قوی استفاده کنید، اما حتی در این صورت، آسیبپذیریهای خاصی همچنان پابرجا هستند.
5. عدم وجود کنترل انقضا داخلی
در حالی که JWT ها یک زمان انقضا (exp) ارائه می دهند، انقضا در سمت کلاینت است، به این معنی که مشتریان تا زمانی که منقضی شود از توکن استفاده می کنند. اگر یک توکن به خطر بیفتد، مهاجم می تواند از آن استفاده کند تا زمانی که منقضی شود، مهم نیست چقدر زمان باقی مانده است.
این می تواند خطرات امنیتی جدی ایجاد کند، به خصوص برای توکن های با عمر طولانی. در مقابل، مدیریت جلسات سنتی به شما امکان می دهد بلافاصله جلسات را باطل کنید و کنترل بهتری بر جلسات فعال ارائه دهید.
6. پیچیده کردن موارد استفاده ساده
برای بسیاری از سیستم های احراز هویت، استفاده از JWT می تواند بیش از حد باشد. احراز هویت سنتی مبتنی بر جلسه (با استفاده از کوکیها و دادههای جلسه ذخیرهشده در سرور) اکثر موارد استفاده را بدون نیاز به مدیریت رمز پیچیده یا خطرات اضافی JWTهای بدون حالت انجام میدهد.
به عنوان مثال:
اگر برنامه شما فقط نیاز به ردیابی کاربرانی دارد که وارد سیستم شده اند، یک رویکرد ساده مبتنی بر کوکی همان امنیت را با پیچیدگی کمتر فراهم می کند.بسیاری از چارچوبهای وب مدرن بهطور خودکار کوکیها، امضا و رمزگذاری را برای شما مدیریت میکنند و نیاز به JWT را در یک جریان ورود/خروج استاندارد اضافی میکنند.
نتیجه گیری: چه زمانی از JWT استفاده نکنید
در حالی که JWT می تواند برای سناریوهای خاص مانند مجوز API یا انتقال یک بار داده مفید باشد، اغلب بهترین انتخاب برای مدیریت جلسه در اکثر برنامه های کاربردی وب نیست. کوکیهای جلسه سنتی، بهویژه آنهایی که توسط چارچوبهای مدرن ارائه میشوند، کوچکتر، ایمنتر و مدیریت آنها آسانتر است.
JWT ها ایده آل نیستند اگر:
شما نیاز به لغو رمز آسان دارید.
شما می خواهید از استفاده بیش از حد از پهنای باند جلوگیری کنید.
شما در حال کار با جلسات حساس و طولانی مدت هستید.
به طور خلاصه، در حالی که JWT یک رویکرد مستقل و بدون حالت برای احراز هویت ارائه می دهد، مسائل امنیتی و عملکردی بالقوه ای را معرفی می کند که بسیاری از توسعه دهندگان باید به دقت در نظر بگیرند. قبل از اتخاذ JWT برای پروژه خود، نیازهای خود را ارزیابی کنید و مطمئن شوید که ابزار مناسبی برای کار است.
این همه برای امروز است.
و همچنین، منابع توسعه دهنده وب مورد علاقه خود را برای کمک به مبتدیان در اینجا به اشتراک بگذارید!
با من ارتباط برقرار کنید:@ LinkedIn و نمونه کارها را بررسی کنید.
کانال یوتیوب من را کاوش کنید! اگر به نظر شما مفید است.
لطفا به پروژه های GitHub من ستاره بدهید ⭐️
با تشکر از 31784! 🤗
توکن های وب JSON (JWT) به دلیل سادگی و ماهیت بدون حالت به طور گسترده ای برای احراز هویت در برنامه های کاربردی وب مورد استفاده قرار گرفته اند. آنها امکان انتقال اطلاعات تایید شده بین دو طرف را می دهند که اغلب در سیستم های ورود استفاده می شود. با این حال، با وجود محبوبیت آنها، بسیاری از کارشناسان امنیتی توصیه می کنند هنگام استفاده از JWT ها، به ویژه برای مدیریت جلسه، احتیاط کنید.
در این مقاله، دلایلی را بررسی خواهیم کرد که چرا JWT ها نگرانی هایی را ایجاد کرده اند، و چرا بسیاری از توسعه دهندگان رویکردهای جایگزین را توصیه می کنند.
JWT چیست؟
JSON Web Token (JWT) یک روش فشرده و ایمن برای نشان دادن ادعاهای منتقل شده بین دو طرف است. به صورت دیجیتالی امضا شده است، که باعث می شود دستکاری آن مشهود باشد. ساختار معمولی JWT شامل سه بخش است:
- Header: الگوریتم امضا را مشخص می کند.
- Payload: حاوی ادعاها یا داده ها است.
- امضا: هش هدر و بار برای اطمینان از یکپارچگی.
JWT ها اغلب برای احراز هویت استفاده می شوند. هنگامی که کاربر وارد سیستم می شود، سرور یک JWT صادر می کند که مشتری ذخیره می کند و به درخواست های آینده برای منابع ایمن متصل می کند. سرور برای احراز هویت کاربر، رمز را تأیید می کند، بدون اینکه نیازی به نگهداری داده های جلسه روی سرور باشد.
پس چرا بسیاری از مردم توصیه می کنند از JWT استفاده نکنید؟
1. اندازه JWT: بزرگتر از آن چیزی است که فکر می کنید
یکی از بارزترین معایب استفاده از JWT اندازه آن است. JWT ها بار خود را حمل می کنند (از جمله ادعاهایی مانند شناسه کاربر، نقش ها و غیره)، که به این معنی است که به طور قابل توجهی بزرگتر از کوکی های جلسه سنتی هستند.
یک کوکی جلسه که یک شناسه کاربری را ذخیره می کند ممکن است فقط چند بایت باشد.
با این حال، JWT شامل شناسه کاربر به همراه متادیتای اضافی، محموله و یک امضا است که آن را بسیار بزرگتر می کند.
این اندازه اضافی منجر به استفاده از پهنای باند بالاتر می شود زیرا توکن با هر درخواست ارسال می شود. این می تواند به ویژه در موقعیت های با پهنای باند کم یا در دستگاه های تلفن همراه مشکل ساز باشد.
2. Revocation Token: یک مشکل امنیتی عمده
یکی از مهمترین محدودیتهای JWTها عدم لغو آسان توکن است. هنگامی که JWT صادر شد، تا زمان انقضای آن معتبر باقی می ماند، که می تواند خطرات امنیتی ایجاد کند.
مشکل خروج:
هنگامی که یک کاربر از سیستم خارج می شود، انتظار دارید که جلسه فوراً باطل شود. اما JWT ها بدون حالت هستند، و سرور هیچ راه مستقیمی برای باطل کردن یک توکن ندارد، مگر اینکه در جایی در سمت سرور ذخیره شده باشد، که هدف از بدون تابعیت بودن JWT را از بین می برد. اگر یک JWT زمان انقضای طولانی داشته باشد، مهاجم می تواند حتی پس از خروج کاربر از توکن دزدیده شده استفاده کند.
نشانه های قدیمی:
در یک سیستم جلسه سنتی، زمانی که امتیازات یک کاربر به روز می شود (به عنوان مثال، یک مدیر به یک کاربر معمولی تنزل می یابد)، جلسه روی سرور می تواند بلافاصله آن تغییر را منعکس کند. با JWT ها، این اتفاق نمی افتد تا زمانی که توکن منقضی شود. این می تواند به کاربر اجازه دهد تا امتیازات قدیمی را برای مدت طولانی تر از آنچه در نظر گرفته شده حفظ کند، که منجر به مشکلات امنیتی بالقوه می شود.
3. امضاهای اضافی
JWT ها اغلب به دلیل قابلیت امضای دیجیتالی مورد ستایش قرار می گیرند و تضمین می کنند که محموله دستکاری نشده است. با این حال، چارچوبهای وب مدرن بهطور خودکار کوکیهای جلسه را امضا و ایمن میکنند، که امضای JWT را در بسیاری از موارد زائد میکند.
مشکل اینجاست:
اگر از JWT ها در یک کوکی استفاده می کنید، کوکی های شما قبلاً امضا شده و گاهی اوقات حتی توسط چارچوب رمزگذاری شده است.
داشتن امضای کوکی و JWT بسیار زیاد است.
در عمل، استفاده از کوکیهای جلسه سنتی همان سطح امنیت JWT را به شما میدهد، اما بدون پیچیدگی و اندازه اضافی.
4. آسیب پذیری های امنیتی
JWT ها اغلب رمزگذاری نمی شوند. این بدان معناست که بار، که حاوی اطلاعات حساس کاربر است، با base64 رمزگذاری شده است اما پنهان نیست. اگر کسی بتواند توکن را رهگیری کند، به راحتی میتواند محتویات آن را رمزگشایی کند.
آسیب پذیری در شرایط خاص:
حملات Man-in-the-Middle: اگر JWT از طریق HTTPS منتقل نشود، مهاجم می تواند توکن را رهگیری کند و به جلسه کاربر دسترسی پیدا کند.
دستکاری توکن: در حالی که امضا تضمین میکند که توکن دستکاری نشده است، هنگام استفاده از الگوریتمهای امضای ضعیف مشکلاتی به وجود میآیند. در برخی موارد، مهاجمان توانستهاند امضاهای JWT را با حملات جعل الگوریتم دور بزنند که منجر به نقض شدید امنیت میشود.
برای کاهش این مشکلات، بسیار مهم است که همیشه از HTTPS و الگوریتمهای امضای قوی استفاده کنید، اما حتی در این صورت، آسیبپذیریهای خاصی همچنان پابرجا هستند.
5. عدم وجود کنترل انقضا داخلی
در حالی که JWT ها یک زمان انقضا (exp) ارائه می دهند، انقضا در سمت کلاینت است، به این معنی که مشتریان تا زمانی که منقضی شود از توکن استفاده می کنند. اگر یک توکن به خطر بیفتد، مهاجم می تواند از آن استفاده کند تا زمانی که منقضی شود، مهم نیست چقدر زمان باقی مانده است.
این می تواند خطرات امنیتی جدی ایجاد کند، به خصوص برای توکن های با عمر طولانی. در مقابل، مدیریت جلسات سنتی به شما امکان می دهد بلافاصله جلسات را باطل کنید و کنترل بهتری بر جلسات فعال ارائه دهید.
6. پیچیده کردن موارد استفاده ساده
برای بسیاری از سیستم های احراز هویت، استفاده از JWT می تواند بیش از حد باشد. احراز هویت سنتی مبتنی بر جلسه (با استفاده از کوکیها و دادههای جلسه ذخیرهشده در سرور) اکثر موارد استفاده را بدون نیاز به مدیریت رمز پیچیده یا خطرات اضافی JWTهای بدون حالت انجام میدهد.
به عنوان مثال:
اگر برنامه شما فقط نیاز به ردیابی کاربرانی دارد که وارد سیستم شده اند، یک رویکرد ساده مبتنی بر کوکی همان امنیت را با پیچیدگی کمتر فراهم می کند.
بسیاری از چارچوبهای وب مدرن بهطور خودکار کوکیها، امضا و رمزگذاری را برای شما مدیریت میکنند و نیاز به JWT را در یک جریان ورود/خروج استاندارد اضافی میکنند.
نتیجه گیری: چه زمانی از JWT استفاده نکنید
در حالی که JWT می تواند برای سناریوهای خاص مانند مجوز API یا انتقال یک بار داده مفید باشد، اغلب بهترین انتخاب برای مدیریت جلسه در اکثر برنامه های کاربردی وب نیست. کوکیهای جلسه سنتی، بهویژه آنهایی که توسط چارچوبهای مدرن ارائه میشوند، کوچکتر، ایمنتر و مدیریت آنها آسانتر است.
JWT ها ایده آل نیستند اگر:
- شما نیاز به لغو رمز آسان دارید.
- شما می خواهید از استفاده بیش از حد از پهنای باند جلوگیری کنید.
- شما در حال کار با جلسات حساس و طولانی مدت هستید.
به طور خلاصه، در حالی که JWT یک رویکرد مستقل و بدون حالت برای احراز هویت ارائه می دهد، مسائل امنیتی و عملکردی بالقوه ای را معرفی می کند که بسیاری از توسعه دهندگان باید به دقت در نظر بگیرند. قبل از اتخاذ JWT برای پروژه خود، نیازهای خود را ارزیابی کنید و مطمئن شوید که ابزار مناسبی برای کار است.
این همه برای امروز است.
و همچنین، منابع توسعه دهنده وب مورد علاقه خود را برای کمک به مبتدیان در اینجا به اشتراک بگذارید!
با من ارتباط برقرار کنید:@ LinkedIn و نمونه کارها را بررسی کنید.
کانال یوتیوب من را کاوش کنید! اگر به نظر شما مفید است.
لطفا به پروژه های GitHub من ستاره بدهید ⭐️
با تشکر از 31784! 🤗