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

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

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

Browser Support

  • کروم: ۱۱۴.
  • لبه: ۱۱۴.
  • فایرفاکس: ۱۴۱.
  • سافاری: پشتیبانی نمی‌شود.

Source

چیپس چیست؟

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

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

CHIPS، رابط برنامه‌نویسی کاربردی دسترسی به حافظه (Storage Access API) و مجموعه‌های وب‌سایت مرتبط (Related Website Sets ) تنها راه برای خواندن و نوشتن کوکی‌ها از زمینه‌های بین‌سایتی، مانند iframeها، در زمانی هستند که کوکی‌های شخص ثالث مسدود شده‌اند.

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

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 یک کوکی با ویژگی Partitioned تنظیم می‌کند، کوکی در یک jar پارتیشن‌بندی‌شده که فقط برای کوکی‌هایی که سایت 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 گزینه آسان‌تری برای ادامه استفاده از کوکی‌های بین‌سایتی، بدون خطرات مرتبط با کوکی‌های پارتیشن‌بندی نشده، فراهم می‌کند.

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

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

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

در مواردی که دسترسی به کوکی‌های شخص ثالثِ پارتیشن‌بندی نشده مسدود شده است، چند رویکرد دیگر برای پارتیشن‌بندی امتحان شده است.

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

سافاری پیش از این سعی داشت کوکی‌ها را بر اساس روش‌های اکتشافی (heuristics) تقسیم‌بندی کند ، اما در نهایت تصمیم گرفت آنها را به طور کلی مسدود کند و یکی از دلایل آن را سردرگمی توسعه‌دهندگان عنوان کرد. اخیراً، سافاری به یک مدل مبتنی بر انتخاب (opt-in) ابراز علاقه کرده است .

چیزی که 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 هستند که در آنها دسترسی به کوکی‌های بین‌سایتی و پارتیشن‌بندی نشده مورد نیاز است.

در شرایطی که نیاز دارید کوکی یکسانی برای سرویسی که در چندین سایت مرتبط تعبیه شده است، در دسترس باشد، Storage Access API و Related Website Sets را در نظر بگیرید.

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

طراحی مجموعه‌های وب‌سایت مرتبط به رابط برنامه‌نویسی کاربردی دسترسی به ذخیره‌سازی (Storage Access API) متکی است و با پارتیشن‌بندی CHIPS ادغام نمی‌شود. اگر موردی دارید که به یک پارتیشن کوکی مشترک در سایت‌های درون یک RWS متکی است، می‌توانید مثال‌ها و بازخوردهایی در مورد مشکل GitHub ارائه دهید .

نسخه آزمایشی

این نسخه آزمایشی به شما نشان می‌دهد که کوکی‌های پارتیشن‌بندی شده چگونه کار می‌کنند و چگونه می‌توانید آنها را در DevTools بررسی کنید.

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

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

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

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

پیش‌نیازها

  1. کروم ۱۱۸ یا بالاتر.
  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. روی برگه برنامه کلیک کنید.
  4. به برنامه > ذخیره‌سازی > کوکی‌ها بروید.
  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 در زمینه سطح بالا هستید، می‌تواند هر دو کوکی را تنظیم و به آنها دسترسی داشته باشد:

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

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

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

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

تب شبکه، کوکی‌های سایت 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 جاسازی شده است، برای iframe سایت B قابل دسترسی نیست.

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

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

  • برای باز کردن DevTools، Control+Shift+J (یا Command+Option+J در مک) را فشار دهید.
  • روی برگه برنامه کلیک کنید.
  • به برنامه > ذخیره‌سازی > کوکی‌ها بروید.
  • روی https://chips-site-b.glitch.me کلیک راست کنید.
  • روی پاک کردن کلیک کنید.

منابع