کوکی‌های دارای حالت تقسیم‌بندی مستقل (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 کلیک کنید.

منابع

،

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

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

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

  • کروم: 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 کلیک کنید.

منابع

،

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

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

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

  • کروم: 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 قبلاً کوکی‌ها را بر اساس اکتشافی پارتیشن بندی کرده بود ، اما در نهایت تصمیم گرفت آنها را به طور کامل مسدود کند و سردرگمی توسعه دهندگان را یکی از دلایل ذکر کرد. اخیراً، سافاری به یک مدل مبتنی بر انتخاب نشان داده است .

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

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

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

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

در زیر چیپس ، کوکی هایی که به پارتیشن بندی می پردازند ، روی کلید میزبان و کلید پارتیشن خود به صورت دو کلید قرار می گیرند.

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

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

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

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

این همان چیزی است که کلید کوکی در مثال قبل و بعد از تراشه ها به نظر می رسد.

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

قبل از چیپس

key=("support.chat.example")

بعد از چیپس

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

طرح امنیتی

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

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

مثال:

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

گزینه های دیگر برای تراشه ها

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

اینها گزینه های دیگری برای تقسیم بندی تراشه ها است که در آن دسترسی به کوک های متقاطع ، بدون تقسیم مورد نیاز است.

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

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

طراحی وب سایت مرتبط طراحی به API دسترسی به ذخیره سازی متکی است و با پارتیشن بندی تراشه ها ادغام نمی شود. اگر یک مورد استفاده دارید که به یک پارتیشن مشترک کوکی در سایت ها در یک RWS متکی است ، می توانید نمونه ها و بازخوردهای مربوط به مسئله GitHub را ارائه دهید .

نسخه ی نمایشی

این نسخه ی نمایشی شما را از طریق نحوه کار کوکی های پارتیشن و چگونگی بازرسی آنها در Devtools طی می کند.

سایت A یک IFRAME را از سایت B تعبیه می کند که از JavaScript برای تنظیم دو کوکی استفاده می کند: یک کوکی پارتیشن و بدون تقسیم. سایت 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. Control+Shift+J (یا Command+Option+J در Mac) فشار دهید تا DevTools باز شود.
  3. روی برگه برنامه کلیک کنید.
  4. به برنامه> ذخیره سازی> کوکی ها بروید.
  5. روی https://chips-site-b.glitch.me کلیک کنید.

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

کوکی های سایت B در برگه برنامه DevTools.

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

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

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

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

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

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

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

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

اگر نمایش داده های کوکی های فیلتر شده را بررسی کنید .

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

در برنامه> ذخیره سازی> کوکی ها با کلیک بر روی https://chips-site-b.glitch.me نشان می دهد:

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

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

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

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

منابع

،

به توسعه دهندگان اجازه دهید تا یک کوکی را به ذخیره سازی "پارتیشن" ، با یک شیشه کوکی جداگانه در هر سایت سطح بالا انتخاب کنند.

وضعیت اجرا

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

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

منبع

چیپس چیست؟

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

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

مرورگرها به خوبی در حال انجام کوکی های شخص ثالث بدون تقسیم هستند ، بنابراین تراشه ها ، API دسترسی به ذخیره سازی و مجموعه های وب سایت مرتبط تنها راه خواندن و نوشتن کوکی ها از متن های متقابل مانند IFRAMES هنگام شخص ثالث خواهد بود. کوکی ها مسدود شده اند.

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

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

هدر تنظیم کنسرو:

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 تنظیم شده است ، در این درخواست نیز ارسال نمی شود.

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

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

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

نمودار که یک وب سایت را با ویجت چت جسد نشان می دهد
SITE RETAIL.EXAMPLE SITE-SUPEDING support.chat.example .

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

Chips گزینه ای آسان تر برای ادامه استفاده از کوکی های متقاطع ، بدون خطرات مرتبط با کوکی های غیرقانونی فراهم می کند.

به عنوان مثال موارد استفاده برای تراشه ها شامل هر سناریویی است که در آن منابع زیر مجموعه ای به سایت های متقاطع نیاز به برخی از مفهوم جلسه یا حالت مداوم دارند که به فعالیت کاربر در یک سایت سطح بالا مانند: مانند:

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

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

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

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

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

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

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

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

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

در زیر چیپس ، کوکی هایی که به پارتیشن بندی می پردازند ، روی کلید میزبان و کلید پارتیشن خود به صورت دو کلید قرار می گیرند.

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

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

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

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

این همان چیزی است که کلید کوکی در مثال قبل و بعد از تراشه ها به نظر می رسد.

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

قبل از چیپس

key=("support.chat.example")

بعد از چیپس

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

طرح امنیتی

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

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

مثال:

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

گزینه های دیگر برای تراشه ها

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

اینها گزینه های دیگری برای تقسیم بندی تراشه ها است که در آن دسترسی به کوک های متقاطع ، بدون تقسیم مورد نیاز است.

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

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

طراحی وب سایت مرتبط طراحی به API دسترسی به ذخیره سازی متکی است و با پارتیشن بندی تراشه ها ادغام نمی شود. اگر یک مورد استفاده دارید که به یک پارتیشن مشترک کوکی در سایت ها در یک RWS متکی است ، می توانید نمونه ها و بازخوردهای مربوط به مسئله GitHub را ارائه دهید .

نسخه ی نمایشی

این نسخه ی نمایشی شما را از طریق نحوه کار کوکی های پارتیشن و چگونگی بازرسی آنها در Devtools طی می کند.

سایت A یک IFRAME را از سایت B تعبیه می کند که از JavaScript برای تنظیم دو کوکی استفاده می کند: یک کوکی پارتیشن و بدون تقسیم. سایت 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. Control+Shift+J (یا Command+Option+J در Mac) فشار دهید تا DevTools باز شود.
  3. روی برگه برنامه کلیک کنید.
  4. به برنامه> ذخیره سازی> کوکی ها بروید.
  5. روی https://chips-site-b.glitch.me کلیک کنید.

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

کوکی های سایت B در برگه برنامه DevTools.

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

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

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

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

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

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

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

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

اگر نمایش داده های کوکی های فیلتر شده را بررسی کنید .

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

در برنامه> ذخیره سازی> کوکی ها با کلیک بر روی https://chips-site-b.glitch.me نشان می دهد:

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

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

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

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

منابع