کوکی‌های دارای حالت تقسیم‌بندی مستقل (CHIPS)

به توسعه‌دهندگان اجازه دهید تا یک کوکی را در فضای ذخیره‌سازی «پارتیشن‌بندی‌شده» انتخاب کنند، با یک ظرف کوکی جداگانه در هر سایت سطح بالا.

وضعیت پیاده سازی

پشتیبانی مرورگر

  • کروم: 114.
  • لبه: 114.
  • فایرفاکس: 131.
  • سافاری: پشتیبانی نمی شود.

منبع

چیپس چیست؟

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

بدون پارتیشن بندی، کوکی های شخص ثالث می توانند سرویس ها را برای ردیابی کاربران و پیوستن اطلاعات آنها از بسیاری از سایت های سطح بالای نامرتبط فعال کنند. این به عنوان ردیابی متقابل سایت شناخته می شود.

مرورگرها در حال حذف تدریجی کوکی‌های شخص ثالث پارتیشن نشده هستند، بنابراین CHIPS، API دسترسی به فضای ذخیره‌سازی و مجموعه‌های وب‌سایت مرتبط تنها راه خواندن و نوشتن کوکی‌ها از زمینه‌های بین‌سایتی، مانند iframes، زمانی که شخص ثالث هستند، خواهند بود. کوکی ها مسدود شده اند

نمودار نشان می دهد که چگونه آشپزی می تواند بین دو وب سایت مختلف به اشتراک گذاشته شود.
بدون پارتیشن بندی کوکی، یک سرویس شخص ثالث می تواند یک کوکی را هنگامی که در یک سایت سطح بالا تعبیه شده است تنظیم کند و زمانی که سرویس در سایت های سطح بالا جاسازی شده است به همان کوکی دسترسی پیدا کند.

CHIPS یک ویژگی کوکی جدید Partitioned را برای پشتیبانی از کوکی‌های بین سایتی که بر اساس بافت سطح بالا تقسیم می‌شوند، معرفی می‌کند.

هدر Set-Cookie:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

جاوا اسکریپت:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

یک کوکی شخص ثالث پارتیشن بندی شده به سایت سطح بالایی که در ابتدا تنظیم شده است گره خورده است و از جای دیگری قابل دسترسی نیست. به این ترتیب کوکی های تنظیم شده توسط یک سرویس شخص ثالث را فقط می توان در همان زمینه جاسازی شده سایت سطح بالا که در ابتدا تنظیم شده بود، خواند.

نموداری که نشان می‌دهد دو وب‌سایت مختلف که یک شخص ثالث مشترک را تعبیه کرده‌اند، دیگر کوکی‌ها را برای آن شخص ثالث به اشتراک نمی‌گذارند.
با پارتیشن بندی کوکی، یک سرویس شخص ثالث که یک کوکی را زمانی که در یک سایت سطح بالا جاسازی می شود تنظیم می کند، نمی تواند به همان کوکی دسترسی داشته باشد، زمانی که این سرویس در سایت های سطح بالای دیگر جاسازی شده است.

با کوکی های پارتیشن بندی شده، وقتی کاربر از سایت A بازدید می کند و محتوای جاسازی شده از سایت C یک کوکی با ویژگی پارتیشن بندی شده تنظیم می کند، کوکی در یک شیشه پارتیشن بندی شده ذخیره می شود که فقط برای کوکی هایی که سایت C هنگام جاسازی در سایت A تنظیم می کند، ذخیره می شود. تنها زمانی آن کوکی را ارسال می کند که سایت سطح بالا A باشد.

هنگامی که کاربر از یک سایت جدید بازدید می کند، به عنوان مثال سایت B، یک فریم جاسازی شده C کوکی را که در زمان جاسازی C در سایت A تنظیم شده بود، دریافت نمی کند.

اگر کاربر از سایت C به عنوان یک وب سایت سطح بالا بازدید کند، کوکی پارتیشن بندی شده ای که C در زمان جاسازی آن در A تنظیم کرده است نیز در آن درخواست ارسال نمی شود.

نموداری که نشان می‌دهد وقتی شخص ثالث یکسان در دو وب‌سایت مختلف تعبیه شده است، کوکی‌ها به اشتراک گذاشته نمی‌شوند.
با پارتیشن بندی کوکی، یک سرویس شخص ثالث که یک کوکی را در صورت تعبیه در یک سایت تنظیم می کند، نمی تواند به همان کوکی حتی زمانی که کاربران از سرویس به عنوان سایت سطح بالا بازدید می کنند، دسترسی پیدا کند.

موارد استفاده کنید

به عنوان مثال، سایت retail.example ممکن است بخواهد با یک سرویس شخص ثالث support.chat.example کار کند تا جعبه گفتگوی پشتیبانی را در سایت خود جاسازی کند. امروزه بسیاری از سرویس‌های چت قابل جاسازی برای ذخیره وضعیت به کوکی‌ها متکی هستند.

نمودار یک وب سایت با ویجت چت تعبیه شده را نشان می دهد
سایت سطح بالا retail.example در حال جاسازی یک سرویس شخص ثالث support.chat.example .

بدون توانایی تنظیم یک کوکی بین سایتی، support.chat.example باید روش‌های جایگزین، اغلب پیچیده‌تر، را برای ذخیره وضعیت پیدا کند. از طرف دیگر، باید در صفحه سطح بالایی که خطرات را معرفی می‌کند جاسازی شود، زیرا به اسکریپت support.chat.example اجازه می‌دهد تا امتیازات بالایی در retail.example داشته باشد، مانند امکان دسترسی به کوکی‌های احراز هویت.

CHIPS گزینه ساده‌تری برای ادامه استفاده از کوکی‌های بین سایتی بدون خطرات مرتبط با کوکی‌های پارتیشن نشده فراهم می‌کند.

نمونه‌هایی از موارد استفاده برای تراشه‌ها شامل هر سناریوهایی است که در آن منابع فرعی بین سایتی نیاز به مفهومی از جلسه یا حالت پایدار دارند که به فعالیت کاربر در یک سایت سطح بالا اختصاص دارد، مانند:

  • جاسازی های چت شخص ثالث
  • نقشه های شخص ثالث جاسازی می شود
  • تعبیه‌های پرداخت شخص ثالث
  • تعادل بار CDN منبع فرعی
  • ارائه دهندگان CMS بدون سر
  • دامنه‌های جعبه ایمنی برای ارائه محتوای غیرقابل اعتماد کاربر (مانند googleusercontent.com و githubusercontent.com)
  • CDN های شخص ثالث که از کوکی ها برای ارائه محتوایی استفاده می کنند که توسط وضعیت احراز هویت در سایت شخص اول کنترل می شود (به عنوان مثال، تصاویر نمایه در سایت های رسانه های اجتماعی میزبانی شده در CDN های شخص ثالث)
  • فریم‌ورک‌های فرانت‌اند که به APIهای راه دور با استفاده از کوکی‌ها در درخواست‌هایشان متکی هستند
  • تبلیغات جاسازی شده که نیاز به محدوده وضعیت به ازای هر ناشر دارند (به عنوان مثال، گرفتن تنظیمات برگزیده تبلیغات کاربران برای آن وب سایت)

چرا CHIPS از یک مدل پارتیشن بندی انتخابی استفاده می کند؟

از آنجایی که مرورگرها کوکی های شخص ثالث پارتیشن بندی نشده را حذف می کنند، چند روش دیگر برای پارتیشن بندی انجام شده است.

فایرفاکس اعلام کرد که تمام کوکی‌های شخص ثالث را به‌طور پیش‌فرض در حالت ETP Strict و حالت مرور خصوصی خود پارتیشن بندی می‌کنند، بنابراین همه کوکی‌های بین سایتی توسط سایت سطح بالا پارتیشن بندی می‌شوند. با این حال، پارتیشن بندی کوکی ها بدون انتخاب شخص ثالث می تواند منجر به اشکالات غیرمنتظره شود، زیرا برخی از سرویس های شخص ثالث سرورهایی ساخته اند که انتظار یک کوکی شخص ثالث پارتیشن نشده را دارند.

Safari قبلاً کوکی‌ها را بر اساس اکتشافی پارتیشن بندی کرده بود ، اما در نهایت تصمیم گرفت آنها را به طور کامل مسدود کند و سردرگمی توسعه دهندگان را یکی از دلایل ذکر کرد. اخیراً، سافاری به یک مدل مبتنی بر انتخاب نشان داده است .

چیزی که CHIPS را از پیاده سازی های موجود کوکی های پارتیشن بندی شده متمایز می کند، انتخاب شخص ثالث است. کوکی‌ها باید با یک ویژگی جدید تنظیم شوند تا پس از منسوخ شدن کوکی‌های شخص ثالث (غیرپارتیشن‌نشده) در درخواست‌های بین شخص ارسال شوند.

در حالی که کوکی‌های شخص ثالث هنوز وجود دارند، ویژگی Partitioned یک نوع رفتار محدودتر و ایمن‌تر از کوکی‌ها را انتخاب می‌کند. CHIPS گام مهمی برای کمک به سرویس‌ها برای انتقال آرام به آینده بدون کوکی‌های شخص ثالث است.

امروزه، کوکی‌ها روی نام میزبان یا دامنه سایتی که آنها را تنظیم می‌کند، کلید می‌شوند، یعنی کلید میزبان آن‌ها.

برای مثال، برای کوکی‌های https://support.chat.example ، کلید میزبان ("support.chat.example") است.

تحت CHIPS، کوکی‌هایی که پارتیشن‌بندی را انتخاب می‌کنند، روی کلید میزبان و کلید پارتیشن دو کلید می‌شوند.

کلید پارتیشن یک کوکی ، سایت ( طرح و دامنه قابل ثبت ) URL سطح بالایی است که مرورگر در ابتدای درخواست به نقطه پایانی که کوکی را تنظیم می کند، از آن بازدید می کرد.

در مثال قبلی، جایی که https://support.chat.example در https://retail.example تعبیه شده است، URL سطح بالا https://retail.example است.

کلید پارتیشن در این مورد ("https", "retail.example") است.

به همین ترتیب، کلید پارتیشن درخواست ، سایت URL سطح بالایی است که مرورگر در ابتدای درخواست از آن بازدید می کند. مرورگرها فقط باید یک کوکی با ویژگی Partitioned در درخواست هایی با همان کلید پارتیشن آن کوکی ارسال کنند.

در اینجا کلید کوکی در مثال قبلی قبل و بعد از CHIPS به نظر می رسد.

سایت A و سایت جاسازی شده C یک کوکی پارتیشن بندی شده به اشتراک می گذارند. وقتی جاسازی نشده باشد، سایت C نمی تواند به کوکی پارتیشن بندی شده دسترسی پیدا کند.
سایت A و سایت جاسازی شده C یک کوکی پارتیشن بندی شده به اشتراک می گذارند. وقتی جاسازی نشده باشد، سایت C نمی تواند به کوکی پارتیشن بندی شده دسترسی پیدا کند.

قبل از چیپس

key=("support.chat.example")

بعد از چیپس

key={("support.chat.example"),("https", "retail.example")}

طراحی امنیتی

برای تشویق اقدامات امنیتی خوب، با CHIPS، کوکی‌ها فقط توسط پروتکل‌های ایمن تنظیم و ارسال می‌شوند.

  • کوکی های پارتیشن بندی شده باید با Secure تنظیم شوند.
  • توصیه می شود هنگام تنظیم کوکی های پارتیشن بندی شده از پیشوند __Host- استفاده کنید تا آنها را به نام میزبان (و نه دامنه قابل ثبت) متصل کنید.

مثال:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

جایگزین های چیپس

Storage Access API و مجموعه‌های وب‌سایت مرتبط (RWS) مکانیزم‌های پلتفرم وب هستند که دسترسی محدود به کوکی بین‌سایتی را برای مقاصد خاص و با کاربر امکان‌پذیر می‌کنند.

اینها جایگزین هایی برای پارتیشن بندی CHIPS هستند که در آن دسترسی به غذاهای بین سایتی و بدون پارتیشن مورد نیاز است.

API دسترسی به فضای ذخیره‌سازی و مجموعه‌های وب‌سایت مرتبط را در شرایطی در نظر بگیرید که به همان کوکی نیاز دارید تا در سرویسی که در چندین سایت مرتبط تعبیه شده است در دسترس باشد.

CHIPS این قابلیت را فراهم می کند که یک سرویس به عنوان یک مؤلفه ایزوله در چندین سایت عمل کند، جایی که نیازی نیست یک کوکی مشابه در چندین سایت در دسترس باشد. اگر سرویس یک کوکی پارتیشن بندی شده تنظیم کند، کلید پارتیشن آن سایت سطح بالا خواهد بود و آن کوکی برای سایت های دیگری که از این سرویس نیز استفاده می کنند در دسترس نخواهد بود.

طراحی Related Website Sets متکی بر Storage Access API است و با پارتیشن بندی CHIPS ادغام نمی شود. اگر یک مورد استفاده دارید که متکی به یک پارتیشن کوکی مشترک در بین سایت‌ها در RWS است، می‌توانید مثال‌ها و بازخوردهایی در مورد مشکل GitHub ارائه دهید .

نسخه ی نمایشی

این نسخه نمایشی نحوه عملکرد کوکی های پارتیشن بندی شده و نحوه بازرسی آنها را در DevTools به شما آموزش می دهد.

سایت A یک iframe از سایت B تعبیه می کند که از جاوا اسکریپت برای تنظیم دو کوکی استفاده می کند: یک کوکی پارتیشن بندی شده و پارتیشن بندی نشده. سایت B تمام کوکی های قابل دسترسی از آن مکان را با استفاده از document.cookie نمایش می دهد.

وقتی کوکی‌های شخص ثالث مسدود می‌شوند، سایت B فقط می‌تواند کوکی را با ویژگی Partitioned در زمینه بین‌سایتی تنظیم کرده و به آن دسترسی داشته باشد.

وقتی کوکی‌های شخص ثالث مجاز هستند، سایت B می‌تواند کوکی بدون پارتیشن را نیز تنظیم کرده و به آن دسترسی داشته باشد.

سایت A و سایت B
سمت چپ: کوکی های شخص ثالث مسدود شده اند. راست: کوکی های شخص ثالث مجاز هستند.

پیش نیازها

  1. Chrome 118 یا بالاتر.
  2. از chrome://flags/#test-third-party-cookie-phaseout دیدن کنید و این تنظیم را فعال کنید

از DevTools برای بررسی کوکی های پارتیشن بندی شده استفاده کنید

  1. از https://chips-site-a.glitch.me دیدن کنید.
  2. برای باز کردن DevTools Control+Shift+J (یا Command+Option+J در مک) را فشار دهید.
  3. روی تب Application کلیک کنید.
  4. به Application > Storage > Cookies بروید.
  5. روی https://chips-site-b.glitch.me کلیک کنید.

DevTools تمام کوکی ها را از مبدا انتخاب شده نمایش می دهد.

کوکی‌های سایت B در تب DevTools Application.

سایت B فقط می تواند کوکی پارتیشن بندی شده را در زمینه بین سایتی تنظیم کند، کوکی پارتیشن بندی نشده مسدود می شود:

  • باید __Host-partitioned-cookie با کلید پارتیشن سایت سطح بالا https://chips-site-a.glitch.me ببینید.
کلید پارتیشن برای __Host-partitioned-cookie.
  1. برو به سایت B کلیک کنید.
  2. در DevTools، به Application > Storage > Cookies بروید.
  3. روی https://chips-site-b.glitch.me کلیک کنید.
سایت B
در سطح بالا، سایت B می تواند همه کوکی ها را ببیند - پارتیشن بندی شده و پارتیشن نشده

در این سناریو، چون در سایت B در زمینه سطح بالا هستید، می‌تواند هر دو کوکی را تنظیم کرده و به آن دسترسی داشته باشد:

  • unpartitioned-cookie یک کلید پارتیشن خالی دارد.
  • __کوکی __Host-partitioned-cookie دارای کلید پارتیشن https://chips-site-b.glitch.me است.
هنگام بازدید از B به عنوان یک سایت سطح بالا، کوکی ها از سایت B در برگه DevTools Application. __Host-partitioned-cookie دارای کلید پارتیشن https://chips-site-b.glitch.me است.

اگر به سایت A برگردید، unpartitioned-cookie اکنون در مرورگر ذخیره می شود، اما از سایت A قابل دسترسی نخواهد بود.

  1. برو به سایت A کلیک کنید.
  2. روی تب Network کلیک کنید.
  3. روی https://chips-site-b.glitch.me کلیک کنید.
  4. روی تب Cookies کلیک کنید.

هنگامی که در سایت A هستید، باید __Host-partitioned-cookie با کلید پارتیشن سایت سطح بالا https://chips-site-a.glitch.me ببینید.

برگه شبکه کوکی‌هایی را از iframe سایت B نشان می‌دهد که وقتی در سایت A تعبیه شده است قابل دسترسی هستند.

اگر نمایش درخواست‌های کوکی‌های فیلتر شده را علامت بزنید، DevTools نشان می‌دهد که کوکی پارتیشن‌بندی نشده مسدود شده است، که با یک راهنمای ابزار با رنگ زرد مشخص شده است: "این کوکی به دلیل تنظیمات برگزیده کاربر مسدود شد" .

برگه شبکه که کوکی‌های مسدود شده را از سایت B iframe نشان می‌دهد.

در Application > Storage > Cookies با کلیک بر روی https://chips-site-b.glitch.me نشان داده می شود:

  • unpartitioned-cookie با کلید پارتیشن خالی.
  • __Host-partitioned-cookie با کلید پارتیشن https://chips-site-a.glitch.me .
کوکی‌های سایت B در تب DevTools Application. __کوکی __Host-partitioned-cookie دارای کلید پارتیشن https://chips-site-a.glitch.me است. unpartitioned-cookie نشان داده شده است، اما وقتی در سایت A تعبیه شده است، برای سایت B iframe قابل دسترسی نیست.

پاک کردن کوکی ها

برای بازنشانی نسخه آزمایشی، تمام کوکی‌های سایت را پاک کنید:

  • برای باز کردن DevTools Control+Shift+J (یا Command+Option+J در مک) را فشار دهید.
  • روی تب Application کلیک کنید.
  • به Application > Storage > Cookies بروید.
  • روی https://chips-site-b.glitch.me کلیک راست کنید.
  • روی Clear کلیک کنید.

منابع