به عنوانیه توسعه دهنده بدون شک تا کنون با cookie، localstorage و احتمالا JWT که مخفف(Json Web Token) هست آشنا و کار کردهاید.
ما توی این مقاله میخوایم ذخیرهسازی JWT رو توی cookie یا localstorage بررسی میکنیم. پس تا انتهای مطلب با من همراه باشید:
قبل از شروع کمی بیشتر با موارد مورد بحث آشنا بشیم:
کوکی (Cookie) چیست؟
کوکیها فایلهای کوچکی هستند که توسط وبسایتها روی مرورگر کاربر ذخیره میشن. این فایلها شامل اطلاعاتی مانند تنظیمات کاربر، اطلاعات ورود به سیستم و دیگر دادههای مربوط به تعامل کاربر با وبسایت هستند. کوکیها به مرورگر امکان میدن تا اطلاعات رو بین جلسات مختلف نگهداری و تجربه کاربری پیوستهتری فراهم کنن.
کوکیهای یکسری ویژگیهایی دارند، از جمله این ویژگیها:
- HttpOnly: این ویژگی باعث میشه کوکی فقط از طریق پروتکل HTTP قابل دسترسی باشد و توسط جاوااسکریپت قابل خواندن نباشه، که این کار امنیت اون رو افزایش میده.
- Secure: کوکیهای Secure فقط از طریق اتصالات HTTPS ارسال میشن، این روش امنیت دادهها رو هنگام انتقال تضمین میکنه.
- Expires/Max-Age: این ویژگیها مدت زمان اعتبار کوکی رو تعیین میکنن و پس از پایان یافتن اون زمان کوکی به طور خودکار حذف میشه.
لوکال استوریج (Local Storage) چیست؟
لوکال استوریج یکی از امکانات ذخیرهسازی وب هست که به صفحات وب اجازه میده تا دادهها را به صورت محلی در مرورگر کاربر ذخیره کنه. این دادهها پایدار هستند و حتی بعد از بستن مرورگر هم باقی میمونن تا زمانی که به صورت دستی حذف بشن.
لوکال استوریج هم مثل کوکی یکسری ویژگیهایی داره ازجمله:
- ظرفیت بالا: لوکال استوریج ظرفیت بیشتری نسبت به کوکیها داره (معمولاً تا ۵-۱۰ مگابایت).
- پایداری: دادهها توی لوکال استوریج تا زمانی که کاربر به صورت دستی آنها را حذف نکنه، باقی میمونن.
- دسترسی توسط جاوااسکریپت: دادهها در لوکال استوریج توسط جاوااسکریپت در همان دامنه قابل دسترسی هستن.
یه استوریج دیگه هم وجود داره بنام Session Storage، اما سشن استوریج (Session Storage) چیست؟
سشن استوریج مشابه لوکال استوریج هست، با این تفاوت که دادهها فقط در طول جلسه مرورگر فعلی معتبر هستند. به عبارت دیگه، دادهها بعد از بستن تب یا مرورگر حذف میشن.
ویژگیهای کلیدی سشن استوریج:
- پایداری محدود: دادهها فقط در طول جلسه مرورگر فعلی معتبر هستند و پس از بستن تب یا مرورگر حذف میشن.
- ظرفیت بالا: مانند لوکال استوریج، ظرفیت بیشتری نسبت به کوکیها داره.
- دسترسی توسط جاوااسکریپت: دادهها توی سشن استوریج هم مثل لوکال استوریج توسط جاوااسکریپت در همون دامنه قابل دسترسی هستند.
خوب حالا که با Cookie و Local Storage بیشتر آشنا شدیم باید به بررسی اصلی بپردازیم.
میشه گفت که ذخیره JWT (JSON Web Token) توی کوکی به چند دلیل امنتر از ذخیره اون توی session storage یا local storage در نظر گرفته میشه:
کوکیها در برابر حملات Cross-Site Scripting (XSS) آسیبپذیری کمتری دارند. حملات XSS زمانی رخ میدهند که یک اسکریپت مخرب به وبسایت تزریق بشه و بتونه دادههای ذخیره شده توی مرورگر کاربر را دسترسی و دستکاری کند. از اونجا که کوکیها دارای یک لایه اضافی امنیتی به نام HttpOnly هست، نمیتوان اونها رو توسط کد JavaScript دسترسی داد که این خطر حملات XSS را کاهش میدهد.
کوکیها میتونن به گونهای تنظیم بشن که دارای زمان انقضاء باشن و بعد از پایان یافتن آن زمان به طور خودکار از مرورگر کاربر حذف میشن. این به معنی این هست که اگه یک مهاجم به JWT ذخیره شده توی یه کوکی دسترسی پیدا کنه، توکن تنها برای مدت زمان محدودی معتبر خواهد بود و خطر آسیب بلندمدت رو کاهش میده.
کوکیها میتونن به گونهای تنظیم بشن که فقط از طریق HTTPS ارسال بشن، که این امر رمزگذاری و تأیید اعتبار دادههای منتقل شده رو فراهم میکنه. این کار خطر حملات man-in-the-middle رو کاهش میده، خطراتی که مهاجم دادههای منتقل شده بین مرورگر کاربر و سرور را رهگیری و تغییر میده.
session storage و local storage در برابر حملات Cross-Site Request Forgery (CSRF) آسیبپذیری بیشتری نسبت به کوکیها دارند. حملات CSRF زمانی رخ میدن که یک مهاجم بدون اطلاع یا رضایت کاربر، از مرورگر او درخواست ارسال کنه. از اونجا که session storage و local storage توسط کد JavaScript قابل دسترسی هستند، مهاجم به راحتی میتونه توکن JWT را از این مکانیزمهای ذخیرهسازی بخونه و ارسال کنه، در حالی که کوکی در برابر این نوع حملات آسیبپذیری کمتری داره.
با نکات بالا بهیه جمعبندی میرسیم که، ذخیره JWT توی یک کوکی با تنظیمات HttpOnly و زمان انقضاء امنتر از ذخیره اون توی session storage یا local storage هست.
با این حال، باید توجه داشت باشین که کوکیها نیز در برابر حملات مصون نیستن و تدابیر امنیتی دیگهای مثل اعتبارسنجی ورودی، کنترل دسترسی و محدودیت نرخ و... نیز باید برای اطمینان از امنیت کلی برنامه پیادهسازی بشن.
امیدوارم این مقاله برای شما مفید بوده باشه. (بخشی از این مقاله برگردان یک مقاله انگلیسی هست)
اگر شما هم در مورد این مقاله نظری دارید از بخش نظرات برای ما ارسال کنید.
برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *
ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *
هنوز برای این مطلب نظری ارسال نشده است!