به توسعهدهندگان اجازه دهید تا یک کوکی را در فضای ذخیرهسازی «پارتیشنبندیشده» انتخاب کنند، با یک ظرف کوکی جداگانه در هر سایت سطح بالا.
وضعیت پیاده سازی
- به طور پیش فرض در Chrome 114 و بالاتر پشتیبانی می شود.
- نسخه آزمایشی اصلی، که اکنون کامل شده است، از Chrome 100 تا 116 در دسترس بود.
- Intent to Experiment و Intent to Ship را بخوانید.
چیپس چیست؟
کوکیهای دارای حالت پارتیشنبندی شده مستقل (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
کار کند تا جعبه گفتگوی پشتیبانی را در سایت خود جاسازی کند. امروزه بسیاری از سرویسهای چت قابل جاسازی برای ذخیره وضعیت به کوکیها متکی هستند.
بدون توانایی تنظیم یک کوکی بین سایتی، 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 به نظر می رسد.
قبل از چیپس
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 میتواند کوکی بدون پارتیشن را نیز تنظیم کرده و به آن دسترسی داشته باشد.
پیش نیازها
- Chrome 118 یا بالاتر.
- از
chrome://flags/#test-third-party-cookie-phaseout
دیدن کنید و این تنظیم را فعال کنید
از DevTools برای بررسی کوکی های پارتیشن بندی شده استفاده کنید
- از https://chips-site-a.glitch.me دیدن کنید.
- برای باز کردن DevTools
Control+Shift+J
(یاCommand+Option+J
در مک) را فشار دهید. - روی تب Application کلیک کنید.
- به Application > Storage > Cookies بروید.
- روی
https://chips-site-b.glitch.me
کلیک کنید.
DevTools تمام کوکی ها را از مبدا انتخاب شده نمایش می دهد.
سایت B فقط می تواند کوکی پارتیشن بندی شده را در زمینه بین سایتی تنظیم کند، کوکی پارتیشن بندی نشده مسدود می شود:
- باید
__Host-partitioned-cookie
با کلید پارتیشن سایت سطح بالاhttps://chips-site-a.glitch.me
ببینید.
- برو به سایت B کلیک کنید.
- در DevTools، به Application > Storage > Cookies بروید.
- روی
https://chips-site-b.glitch.me
کلیک کنید.
در این سناریو، چون در سایت B در زمینه سطح بالا هستید، میتواند هر دو کوکی را تنظیم کرده و به آن دسترسی داشته باشد:
-
unpartitioned-cookie
یک کلید پارتیشن خالی دارد. - __کوکی
__Host-partitioned-cookie
دارای کلید پارتیشنhttps://chips-site-b.glitch.me
است.
اگر به سایت A برگردید، unpartitioned-cookie
اکنون در مرورگر ذخیره می شود، اما از سایت A قابل دسترسی نخواهد بود.
- برو به سایت A کلیک کنید.
- روی تب Network کلیک کنید.
- روی
https://chips-site-b.glitch.me
کلیک کنید. - روی تب Cookies کلیک کنید.
هنگامی که در سایت A هستید، باید __Host-partitioned-cookie
با کلید پارتیشن سایت سطح بالا https://chips-site-a.glitch.me
ببینید.
اگر نمایش درخواستهای کوکیهای فیلتر شده را علامت بزنید، DevTools نشان میدهد که کوکی پارتیشنبندی نشده مسدود شده است، که با یک راهنمای ابزار با رنگ زرد مشخص شده است: "این کوکی به دلیل تنظیمات برگزیده کاربر مسدود شد" .
در Application > Storage > Cookies با کلیک بر روی https://chips-site-b.glitch.me
نشان داده می شود:
-
unpartitioned-cookie
با کلید پارتیشن خالی. -
__Host-partitioned-cookie
با کلید پارتیشنhttps://chips-site-a.glitch.me
.
پاک کردن کوکی ها
برای بازنشانی نسخه آزمایشی، تمام کوکیهای سایت را پاک کنید:
- برای باز کردن DevTools
Control+Shift+J
(یاCommand+Option+J
در مک) را فشار دهید. - روی تب Application کلیک کنید.
- به Application > Storage > Cookies بروید.
- روی
https://chips-site-b.glitch.me
کلیک راست کنید. - روی Clear کلیک کنید.
منابع
- GitHub : توضیح دهنده را بخوانید، سوالاتی را مطرح کنید و بحث را دنبال کنید .
- پشتیبانی برنامهنویس : سؤال بپرسید و به بحثهای مربوط به مخزن پشتیبانی توسعهدهنده Privacy Sandbox بپیوندید.