عنوان:

‫ChunkingCookieManager راهی برای مدیریت کوکی‌هایی با اندازه‌های بزرگ در برنامه‌های ASP.NET Core


نویسنده: وحید نصیری
تاریخ: ۱۴۰۳/۱۱/۲۷ ۱۴:۴۸
آدرس: www.dntips.ir
ChunkingCookieManager و احراز هویت ASP.NET Core در برنامه‌های وب؛ بیایید آنچه را که این بدان معناست، بررسی کنیم:

کوکی‌ها 101:
کوکی‌ها را مانند یادداشت‌های کوچکی تصور کنید که یک وب سایت، به مرورگر شما می‌دهد. این یادداشت‌ها می‌توانند اطلاعاتی را درباره‌ی شما، مانند وضعیت ورود به سیستم، یا تنظیمات برگزیده‌ی شما، ذخیره کنند. وقتی دوباره از وب سایت بازدید می‌کنید، مرورگر شما این یادداشت‌ها را برمی‌گرداند و به وب سایت اجازه می‌دهد شما را به‌خاطر بسپارد.

مشکل: محدودیت اندازه‌ی کوکی‌ها
مرورگرها محدودیت‌هایی را در مورد اندازه‌ی کوکی‌ها دارند. اگر سعی کنید اطلاعات زیادی را در یک کوکی واحد ذخیره کنید، ممکن است کوتاه شود (قطع شود) یا حتی به طور کلی رد شود. این مورد می‌تواند یک مشکل باشد، وقتی که با داده‌های احراز هویت پیچیده، مانند نقش‌ها و مجوزهای کاربر که می تواند بسیار طولانی هم باشد، سر و کار داریم.

تکه تکه کردن برای نجات:
اینجاست که ChunkingCookieManager وارد عمل می شود؛ این راهی برای دور زدن محدودیت اندازه است. به‌جای ذخیره‌ی تمام اطلاعات احراز هویت در یک کوکی بزرگ، آن را تکه تکه می کند؛ یعنی آن را به قطعات کوچکتر تقسیم می کند. هر قطعه در کوکی جداگانه‌ی خود ذخیره می‌شود.

قیاس:
این مورد را مانند ارسال یک بسته‌ی بزرگ در نظر بگیرید. به‌جای تلاش برای قرار دادن همه چیز در یک جعبه که ممکن است خیلی بزرگ یا سنگین باشد، محتویات را به چند جعبه‌ی کوچکتر تقسیم می‌کنید. شما هر جعبه را برچسب می‌زنید (تکه‌ی 1، تکه‌ی 2 و غیره) و همه‌ی آنها را می فرستید. گیرنده می‌تواند سپس همه‌ی جعبه‌ها را جمع آوری کرده و محتویات را دوباره کنار هم قرار دهد.

نحوه‌ی عملکرد (به طور ساده):
  1. شکستن اطلاعات:ChunkingCookieManager اطلاعات احراز هویت را می‌گیرد و آن را به قطعاتی تقسیم می‌کند.
  2. ایجاد کوکی: برای هر قطعه، یک کوکی جداگانه ایجاد می‌کند. این کوکی‌ها ممکن است چیزی شبیه به AuthenticationChunk1، AuthenticationChunk2 و غیره نامگذاری شوند.
  3. ذخیره سازی: این کوکی‌های تکه تکه شده، به مرورگر ارسال می شوند.
  4. بازیابی: وقتی مرورگر کوکی‌ها را برمی‌گرداند، ChunkingCookieManager همه‌ی قطعات را جمع آوری می‌کند.
  5. مونتاژ مجدد: قطعات را دوباره کنار هم قرار می‌دهد تا اطلاعات احراز هویت اصلی را بازسازی کند.

مثال:
بیایید بگوییم داده‌های احراز هویت یک کاربر، 2 کیلوبایت حجم دارد. محدودیت کوکی مرورگر، 4 کیلوبایت است؛ اما بهتر است مقداری فضا را خالی بگذارید. ChunkingCookieManager ممکن است داده‌های 2 کیلوبایتی را به دو قطعه‌ی 1 کیلوبایتی تقسیم کند. سپس دو کوکی را ایجاد می کند: AuthenticationChunk1 و AuthenticationChunk2 که هر کدام حاوی یک قطعه داده هستند.

فواید:
  • بر محدودیت‌های اندازه غلبه می کند: اجازه می‌دهد مقدار بیشتری از داده‌های احراز هویت ذخیره شود.
  • قابلیت اطمینان بهبود یافته: خطر کوتاه شدن یا رد شدن کوکی‌ها را کاهش می‌دهد.

اگر به‌فکر بهینه سازی تنظیمات ChunkingCookieManager خود هستید، در اینجا خلاصه‌ای از تنظیمات کلیدی و نحوه‌ی برخورد با آنها آورده شده است:
1. ChunkSize
  • چیست: این مقدار، حداکثر اندازه (به کاراکتر) هر قطعه کوکی را تعیین می‌کند. اگر داده‌های احراز هویت، از این اندازه بیشتر باشد، به قطعات متعددی تقسیم می‌شود.
  • مقدار پیش فرض: 4050 کاراکتر. این یک مقدار ایمن است که به طور کلی توسط اکثر مرورگرها پشتیبانی می‌شود.
    • ملاحظات: محدودیت‌های مرورگر: در حالیکه مقدار پیش فرض آن خوب است، به‌خاطر داشته باشید که مرورگرها محدودیت‌هایی در مورد تعداد کل کوکی‌ها در هر دامنه و اندازه‌ی کل همه کوکی‌ها دارند.
    • عملکرد: اندازه‌ی قطعه کوچکتر، به معنای کوکی‌های بیشتر است که می‌تواند کمی سربار هر درخواست را افزایش دهد (داده‌های بیشتری ردوبدل می شوند). با این حال، این معمولا ناچیز است.
    • امنیت: اغلب توصیه می‌شود که اندازه‌ی قطعات کوچکتر باشد تا در صورت به‌خطر افتادن یک کوکی واحد، تأثیر آن به حداقل برسد.
  • توصیه: با مقدار پیش فرض 4050 شروع کنید. اگر درک خوبی از اندازه داده‌های احراز هویت و محدودیت‌های مرورگر خود دارید، می توانید برای امنیت بیشتر با مقادیر کمی کوچکتر (به عنوان مثال، 2000-3000) آزمایش کنید.
2. ThrowForPartialCookies
  • چیست: یک مقدار بولی که تعیین می‌کند آیا در صورتیکه همه‌ی قطعات کوکی در هنگام مونتاژ مجدد کوکی در دسترس نباشند، یک استثناء باید ایجاد شود یا خیر.
  • مقدار پیش فرض:false
    • ملاحظات: اشکال زدایی: تنظیم این مقدار به true می‌تواند در طول توسعه برای شناسایی مشکلاتی که ممکن است قطعات کوکی، گم شده باشند (به عنوان مثال، به دلیل مشکلات مرورگر یا مشکلات شبکه) مفید باشد.
    • تولید: در یک محیط تولید، ممکن است بخواهید این مقدار را false نگه دارید تا از خطاهای غیرمنتظره جلوگیری کنید. در عوض، می‌توانید مواردی را که کوکی‌های جزئی دریافت می‌شوند، به خوبی مدیریت کنید (به عنوان مثال، با ثبت هشدار یا درخواست از کاربر برای احراز هویت مجدد).
  • توصیه: این مقدار را برای توسعه و اشکال زدایی روی true تنظیم کنید؛ در تولید، تنظیم آن را روی false در نظر بگیرید و مدیریت خطای مناسب را برای کوکی های جزئی پیاده سازی کنید.
نکات مهم:
  • کاراکترها، نه بایت‌ها: ChunkSize بر حسب کاراکتر اندازه گیری می‌شود؛ نه بایت. این را هنگام تخمین اندازه‌ی داده‌های احراز هویت خود، در نظر داشته باشید. زیرا تعداد کاراکترها، ممکن است مستقیماً با تعداد بایت‌ها مطابقت نداشته باشد.
  • تست: همیشه تنظیمات کوکی خود را به طور کامل در مرورگرهای مختلف آزمایش کنید تا مطمئن شوید که همانطور که انتظار می‌رود کار می‌کنند.
  • بهترین شیوه‌های امنیتی: تکه تکه کردن فقط یک جنبه از امنیت کوکی است. اطمینان حاصل کنید که سایر بهترین شیوه‌ها را نیز دنبال می‌کنید، مانند:
    • استفاده از HTTPS برای رمزگذاری کوکی‌ها در هنگام انتقال.
    • تنظیم پرچم‌های مناسب HttpOnly و Secure برای کوکی‌های خود.

مثال پیکربندی:
services.AddScoped<ICookieManager>(svc => new ChunkingCookieManager
{
    ChunkSize = 3000, // Slightly smaller chunk size
    ThrowForPartialCookies = true // For development
});


مشاهده مطلب اصلی