Cookie có trạng thái phân vùng độc lập (CHIPS)

Cho phép nhà phát triển chọn sử dụng cookie trong bộ nhớ "được phân vùng", với một nhóm cookie riêng cho mỗi trang web cấp cao nhất.

Trạng thái triển khai

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 141.
  • Safari: not supported.

Source

CHIPS là gì?

Cookie có trạng thái được phân vùng độc lập (CHIPS) cho phép nhà phát triển chọn sử dụng cookie trong bộ nhớ được phân vùng, với các hũ cookie riêng biệt cho mỗi trang web cấp cao nhất, giúp cải thiện quyền riêng tư và tính bảo mật của người dùng.

Nếu không phân vùng, cookie của bên thứ ba có thể cho phép các dịch vụ theo dõi người dùng và kết hợp thông tin của họ từ nhiều trang web cấp cao nhất không liên quan. Đây được gọi là tính năng theo dõi trên nhiều trang web.

CHIPS, Storage Access APIBộ trang web có liên quan là cách duy nhất để đọc và ghi cookie từ các bối cảnh trên nhiều trang web (chẳng hạn như iframe) khi cookie của bên thứ ba bị chặn.

Sơ đồ cho thấy cách cookie có thể được chia sẻ giữa hai trang web khác nhau.
Nếu không phân vùng cookie, một dịch vụ của bên thứ ba có thể đặt cookie khi được nhúng vào một trang web cấp cao nhất và truy cập vào cùng một cookie đó khi dịch vụ được nhúng vào các trang web cấp cao nhất khác.

CHIPS giới thiệu một thuộc tính cookie mới là Partitioned để hỗ trợ các cookie cross-site được phân vùng theo ngữ cảnh cấp cao nhất.

Tiêu đề Set-Cookie:

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

JavaScript:

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

Cookie được phân vùng của bên thứ ba được liên kết với trang web cấp cao nhất nơi cookie đó được đặt ban đầu và không thể truy cập từ nơi khác. Nhờ đó, cookie do dịch vụ bên thứ ba đặt chỉ có thể được đọc trong cùng một bối cảnh được nhúng của trang web cấp cao nhất nơi cookie đó được đặt ban đầu.

Sơ đồ cho thấy rằng hai trang web khác nhau nhúng một bên thứ ba chung sẽ không còn chia sẻ cookie cho bên thứ ba đó nữa.
Với tính năng phân vùng cookie, một dịch vụ của bên thứ ba đặt cookie khi được nhúng vào một trang web cấp cao nhất sẽ không thể truy cập vào chính cookie đó khi dịch vụ được nhúng vào các trang web cấp cao nhất khác.

Với cookie được phân vùng, khi người dùng truy cập vào trang web A và nội dung được nhúng từ trang web C đặt một cookie có thuộc tính Partitioned, cookie đó sẽ được lưu trong một tệp cookie được phân vùng chỉ dành cho những cookie mà trang web C đặt khi được nhúng trên trang web A. Trình duyệt sẽ chỉ gửi cookie đó khi trang web cấp cao nhất là A.

Khi người dùng truy cập vào một trang web mới (ví dụ: trang web B), khung C được nhúng sẽ không nhận được cookie được đặt khi C được nhúng trong trang web A.

Nếu người dùng truy cập vào trang web C dưới dạng một trang web cấp cao nhất, thì cookie được phân vùng mà C đã đặt khi được nhúng vào A cũng sẽ không được gửi trong yêu cầu đó.

Sơ đồ cho thấy cookie không được chia sẻ khi cùng một bên thứ ba được nhúng trên hai trang web khác nhau.
Với tính năng phân vùng cookie, một dịch vụ bên thứ ba đặt cookie khi được nhúng vào một trang web sẽ không thể truy cập vào chính cookie đó ngay cả khi người dùng truy cập vào dịch vụ đó dưới dạng trang web cấp cao nhất.

Trường hợp sử dụng

Ví dụ: trang web retail.example có thể muốn hợp tác với dịch vụ bên thứ ba support.chat.example để nhúng một hộp trò chuyện hỗ trợ trên trang web của mình. Nhiều dịch vụ trò chuyện có thể nhúng hiện nay dựa vào cookie để lưu trạng thái.

Sơ đồ minh hoạ một trang web có tiện ích trò chuyện được nhúng
Trang web bán lẻ cấp cao nhất retail.example nhúng một dịch vụ bên thứ ba support.chat.example.

Nếu không có khả năng đặt cookie trên nhiều trang web, support.chat.example sẽ cần tìm các phương thức thay thế (thường phức tạp hơn) để lưu trữ trạng thái. Ngoài ra, bạn cần nhúng tập lệnh này vào trang cấp cao nhất. Điều này sẽ gây ra rủi ro vì cho phép tập lệnh support.chat.example có đặc quyền cao trên retail.example, chẳng hạn như khả năng truy cập vào cookie xác thực.

CHIPS cung cấp một lựa chọn dễ dàng hơn để tiếp tục sử dụng cookie trên nhiều trang web mà không gặp phải các rủi ro liên quan đến cookie không được phân vùng.

Các trường hợp sử dụng CHIPS bao gồm mọi trường hợp mà tài nguyên phụ trên nhiều trang web yêu cầu một số khái niệm về phiên hoặc trạng thái liên tục được giới hạn trong hoạt động của người dùng trên một trang web cấp cao nhất, chẳng hạn như:

  • Tiện ích trò chuyện được nhúng của bên thứ ba
  • Bản đồ được nhúng của bên thứ ba
  • Khoản thanh toán được nhúng của bên thứ ba
  • Cân bằng tải CDN cho tài nguyên phụ
  • Nhà cung cấp CMS không có giao diện người dùng
  • Miền hộp cát để phân phát nội dung không đáng tin cậy của người dùng (chẳng hạn như googleusercontent.com và githubusercontent.com)
  • CDN của bên thứ ba sử dụng cookie để phân phát nội dung được kiểm soát quyền truy cập theo trạng thái xác thực trên trang web của bên thứ nhất (ví dụ: ảnh hồ sơ trên các trang web mạng xã hội được lưu trữ trên CDN của bên thứ ba)
  • Khung giao diện người dùng dựa vào các API từ xa bằng cookie trong các yêu cầu của chúng
  • Quảng cáo được nhúng cần có trạng thái theo phạm vi cho mỗi nhà xuất bản (ví dụ: thu thập lựa chọn ưu tiên về quảng cáo của người dùng cho trang web đó)

Lý do CHIPS sử dụng mô hình phân vùng chọn tham gia

Khi quyền truy cập vào cookie chưa phân vùng của bên thứ ba bị chặn, một số phương pháp phân vùng khác đã được thử nghiệm.

Firefox thông báo rằng họ sẽ phân vùng tất cả cookie của bên thứ ba theo mặc định trong chế độ ETP Strict và chế độ duyệt web riêng tư, vì vậy, tất cả cookie trên nhiều trang web đều được phân vùng theo trang web cấp cao nhất. Tuy nhiên, việc phân vùng cookie mà không có sự đồng ý của bên thứ ba có thể dẫn đến các lỗi không mong muốn, vì một số dịch vụ của bên thứ ba đã tạo các máy chủ dự kiến sẽ có một cookie không được phân vùng của bên thứ ba.

Trước đây, Safari đã thử phân vùng cookie dựa trên phương pháp phỏng đoán, nhưng cuối cùng đã chọn chặn hoàn toàn cookie, với lý do là gây nhầm lẫn cho nhà phát triển. Gần đây, Safari đã bày tỏ sự quan tâm đến mô hình dựa trên lựa chọn tham gia.

Điều khiến CHIPS khác biệt so với các cách triển khai hiện có của cookie được phân vùng là lựa chọn không bắt buộc đối với bên thứ ba. Bạn phải đặt cookie bằng một thuộc tính mới để được gửi trong các yêu cầu trên nhiều bên một lần (không phân vùng) sau khi cookie của bên thứ ba không còn được dùng nữa.

Mặc dù cookie của bên thứ ba vẫn tồn tại, nhưng thuộc tính Partitioned cung cấp lựa chọn sử dụng một loại hành vi cookie hạn chế và an toàn hơn. CHIPS là một bước quan trọng giúp các dịch vụ chuyển đổi suôn sẻ sang một tương lai không có cookie của bên thứ ba.

Ngày nay, cookie được khoá theo tên máy chủ hoặc miền của trang web đã đặt cookie, tức là khoá máy chủ của cookie.

Ví dụ: đối với cookie từ https://support.chat.example, khoá máy chủ lưu trữ là ("support.chat.example").

Trong CHIPS, những cookie chọn phân vùng sẽ được khoá kép trên khoá máy chủ lưu trữ và khoá phân vùng.

Khoá phân vùng của cookie là trang web (lược đồ và miền có thể đăng ký) của URL cấp cao nhất mà trình duyệt đang truy cập vào thời điểm bắt đầu yêu cầu đến điểm cuối đã đặt cookie.

Trong ví dụ trước, khi https://support.chat.example được nhúng trên https://retail.example, URL cấp cao nhất là https://retail.example.

Trong trường hợp đó, khoá phân vùng là ("https", "retail.example").

Tương tự, khoá phân vùng của yêu cầu là trang web của URL cấp cao nhất mà trình duyệt đang truy cập khi bắt đầu một yêu cầu. Trình duyệt chỉ được gửi cookie có thuộc tính Partitioned trong các yêu cầu có cùng khoá phân vùng với cookie đó.

Đây là giao diện của khoá cookie trong ví dụ trước đó trước và sau CHIPS.

Trang web A và trang web C được nhúng dùng chung một cookie được phân vùng. Khi không được nhúng, trang web C không thể truy cập vào cookie được phân vùng.
Trang web A và trang web C được nhúng dùng chung một cookie được phân vùng. Khi không được nhúng, trang web C không thể truy cập vào cookie được phân vùng.

Trước CHIPS

key=("support.chat.example")

Sau CHIPS

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

Thiết kế bảo mật

Để khuyến khích các phương pháp bảo mật hiệu quả, với CHIPS, cookie chỉ được đặt và gửi qua các giao thức bảo mật.

  • Bạn phải đặt cookie được phân vùng bằng Secure.
  • Bạn nên sử dụng tiền tố __Host- khi đặt cookie được phân vùng để liên kết các cookie đó với tên máy chủ (chứ không phải miền có thể đăng ký).

Ví dụ:

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

Các lựa chọn thay thế cho CHIPS

Storage Access APIBộ trang web có liên quan (RWS) được liên kết là các cơ chế của nền tảng web cho phép truy cập hạn chế vào cookie trên nhiều trang web cho các mục đích cụ thể mà người dùng có thể thấy.

Đây là những lựa chọn thay thế cho việc phân vùng CHIPS khi cần có quyền truy cập vào các cookie chưa được phân vùng trên nhiều trang web.

Hãy cân nhắc sử dụng Storage Access API và Bộ trang web có liên quan trong trường hợp bạn cần cùng một cookie có sẵn cho một dịch vụ được nhúng trong nhiều trang web có liên quan.

CHIPS cung cấp khả năng cho một dịch vụ hoạt động như một thành phần riêng biệt trên nhiều trang web, trong đó không cần phải có cùng một cookie trên nhiều trang web. Nếu dịch vụ đặt một cookie được phân vùng, thì khoá phân vùng của cookie đó sẽ là trang web cấp cao nhất và cookie đó sẽ không có sẵn cho các trang web khác cũng sử dụng dịch vụ này.

Thiết kế Bộ trang web có liên quan dựa trên Storage Access API và không tích hợp với việc phân vùng CHIPS. Nếu có trường hợp sử dụng dựa trên một phân vùng cookie dùng chung trên các trang web trong RWS, bạn có thể cung cấp ví dụ và ý kiến phản hồi về vấn đề trên GitHub.

Bản minh hoạ

Bản minh hoạ này sẽ hướng dẫn bạn cách hoạt động của cookie được phân vùng và cách bạn có thể kiểm tra các cookie đó trong Công cụ cho nhà phát triển.

Trang web A nhúng một iframe từ Trang web B. Trang web B dùng JavaScript để đặt 2 cookie: một cookie được phân vùng và một cookie không được phân vùng. Trang web B hiển thị tất cả cookie có thể truy cập từ vị trí đó bằng cách sử dụng document.cookie.

Khi cookie của bên thứ ba bị chặn, trang web B sẽ chỉ có thể đặt và truy cập cookie có thuộc tính Partitioned trong bối cảnh trên nhiều trang web.

Khi cookie của bên thứ ba được cho phép, trang web B cũng có thể đặt và truy cập vào cookie chưa được phân vùng.

Trang web A và trang web B
Bên trái: Cookie của bên thứ ba bị chặn. Bên phải: Cho phép cookie của bên thứ ba.

Điều kiện tiên quyết

  1. Chrome 118 trở lên.
  2. Truy cập vào phần chrome://flags/#test-third-party-cookie-phaseout rồi bật chế độ cài đặt này

Sử dụng Công cụ cho nhà phát triển để kiểm tra cookie được phân vùng

  1. Truy cập vào https://chips-site-a.glitch.me.
  2. Nhấn Control+Shift+J (hoặc Command+Option+J trên máy Mac) để mở DevTools.
  3. Nhấp vào thẻ Ứng dụng.
  4. Chuyển đến Application > Storage > Cookies (Ứng dụng > Bộ nhớ > Cookie).
  5. Nhấp vào https://chips-site-b.glitch.me.

Công cụ cho nhà phát triển sẽ hiển thị tất cả cookie từ nguồn đã chọn.

Cookie của trang web B trong thẻ Ứng dụng của Công cụ cho nhà phát triển.

Trang web B chỉ có thể đặt cookie được phân vùng trong ngữ cảnh nhiều trang web, cookie không được phân vùng sẽ bị chặn:

  • Bạn sẽ thấy __Host-partitioned-cookie có khoá phân vùng của trang web cấp cao nhất https://chips-site-a.glitch.me.
Khoá phân vùng cho __Host-partitioned-cookie.
  1. Nhấp vào Go to Site B (Chuyển đến Trang web B).
  2. Trong Công cụ cho nhà phát triển, hãy chuyển đến Application > Storage > Cookies (Ứng dụng > Bộ nhớ > Cookie).
  3. Nhấp vào https://chips-site-b.glitch.me.
Cơ sở B
Ở cấp cao nhất, trang web B có thể thấy tất cả cookie – được phân vùng và không được phân vùng

Trong trường hợp này, vì bạn đang ở trên trang web B trong bối cảnh cấp cao nhất, nên trang web này có thể đặt và truy cập cả hai cookie:

  • unpartitioned-cookie có khoá phân vùng trống.
  • Cookie __Host-partitioned-cookie có khoá phân vùng https://chips-site-b.glitch.me.
Cookie từ trang web B trong thẻ Application (Ứng dụng) của Công cụ cho nhà phát triển khi truy cập vào B dưới dạng trang web cấp cao nhất. __Host-partitioned-cookie có khoá phân vùng https://chips-site-b.glitch.me.

Nếu bạn quay lại trang web A, unpartitioned-cookie hiện được lưu trữ trong trình duyệt nhưng sẽ không truy cập được từ trang web A.

  1. Nhấp vào Truy cập vào Trang web A.
  2. Nhấp vào thẻ Mạng.
  3. Nhấp vào https://chips-site-b.glitch.me.
  4. Nhấp vào thẻ Cookie.

Khi ở trên trang web A, bạn sẽ thấy __Host-partitioned-cookie có khoá phân vùng của trang web cấp cao nhất https://chips-site-a.glitch.me.

Thẻ Mạng cho thấy các cookie từ iframe của trang web B có thể truy cập được khi được nhúng trên trang web A.

Nếu bạn đánh dấu vào show filtered out cookies requests (hiện các yêu cầu về cookie đã bị lọc), Công cụ cho nhà phát triển sẽ cho biết cookie chưa được phân vùng đã bị chặn, được đánh dấu bằng màu vàng kèm theo chú thích: "Cookie này đã bị chặn do các lựa chọn ưu tiên của người dùng".

Thẻ Mạng cho thấy các cookie bị chặn từ iframe của trang web B.

Trong Application > Storage > Cookies (Ứng dụng > Bộ nhớ > Cookie), khi bạn nhấp vào https://chips-site-b.glitch.me, thông tin sau sẽ xuất hiện:

  • unpartitioned-cookie bằng khoá phân vùng trống.
  • __Host-partitioned-cookie có khoá phân vùng https://chips-site-a.glitch.me.
Cookie từ trang web B trong thẻ Ứng dụng của Công cụ cho nhà phát triển. Cookie __Host-partitioned-cookie có khoá phân vùng https://chips-site-a.glitch.me. unpartitioned-cookie xuất hiện, nhưng iframe của trang web B không truy cập được khi được nhúng trên trang web A.

Xóa cookie

Để đặt lại bản minh hoạ, hãy xoá tất cả cookie cho trang web:

  • Nhấn Control+Shift+J (hoặc Command+Option+J trên máy Mac) để mở DevTools.
  • Nhấp vào thẻ Ứng dụng.
  • Chuyển đến Application > Storage > Cookies (Ứng dụng > Bộ nhớ > Cookie).
  • Nhấp chuột phải vào https://chips-site-b.glitch.me.
  • Nhấp vào Xoá.

Tài nguyên