Để ngăn chặn một số loại hình theo dõi trên nhiều trang web cho kênh phụ, Chrome đã phân vùng hầu hết các API bộ nhớ và giao tiếp trong bối cảnh của bên thứ ba.
Trạng thái triển khai
Tính năng này đã được bật cho tất cả người dùng trên Chrome 115 trở lên. Đề xuất về việc phân vùng bộ nhớ vẫn đang được thảo luận thêm.
Phân vùng bộ nhớ là gì?
Để ngăn chặn một số loại hình theo dõi trên nhiều trang web cho kênh phụ, Chrome đang phân vùng bộ nhớ và các API giao tiếp trong bối cảnh của bên thứ ba.
Nếu không có tính năng phân vùng bộ nhớ, một trang web có thể kết hợp dữ liệu trên nhiều trang web để theo dõi người dùng trên web. Ngoài ra, tính năng này cho phép trang web được nhúng suy luận các trạng thái cụ thể về người dùng trong trang web cấp cao nhất bằng cách sử dụng các kỹ thuật kênh bên như Tấn công theo thời gian, XS-Leaks và COSI.
Trước đây, bộ nhớ chỉ được khoá theo nguồn gốc. Điều này có nghĩa là nếu một iframe từ example.com
được nhúng trên a.com
và b.com
, thì iframe đó có thể tìm hiểu về thói quen duyệt web của bạn trên hai trang web đó bằng cách lưu trữ và truy xuất thành công mã nhận dạng từ bộ nhớ. Khi bạn bật tính năng phân vùng bộ nhớ của bên thứ ba, bộ nhớ cho example.com
sẽ tồn tại trong hai phân vùng khác nhau, một phân vùng cho a.com
và phân vùng còn lại cho b.com
.
Việc phân vùng thường có nghĩa là dữ liệu do các API bộ nhớ lưu trữ (chẳng hạn như bộ nhớ cục bộ và IndexedDB) lưu trữ bằng một iframe không còn truy cập được vào tất cả ngữ cảnh trong cùng một nguồn gốc. Thay vào đó, dữ liệu chỉ có sẵn cho các ngữ cảnh có cùng nguồn gốc và cùng trang web cấp cao nhất.
Phân vùng bộ nhớ trên các iframe được nối
Khi một iframe chứa một iframe, mọi thứ sẽ trở nên phức tạp hơn. Điều này đặc biệt đúng khi cùng một nguồn gốc xuất hiện ở nhiều vị trí trong chuỗi.
Ví dụ: A1 chứa một iframe cho B, trong đó chứa một iframe cho A2 và cả A1 và A2 đều nằm trên cùng một trang web. Nếu chúng ta chỉ xem xét ngữ cảnh cấp cao nhất và cấp hiện tại khi phân vùng, thì iframe A2 có thể được coi là của bên thứ nhất vì nằm trên cùng một trang web với cấp cao nhất (A1) mặc dù có iframe của bên thứ ba can thiệp (B). Điều này có thể khiến A2 gặp phải các rủi ro bảo mật như nhấp chuột giả mạo nếu A2 có quyền truy cập vào bộ nhớ chưa phân vùng theo mặc định.
Để giải quyết vấn đề này, Chrome thêm một "bit gốc" vào khoá phân vùng bộ nhớ. Khoá này được đặt nếu có bất kỳ tài liệu nào giữa ngữ cảnh hiện tại và ngữ cảnh cấp cao nhất nằm trên nhiều trang web với ngữ cảnh hiện tại. Trong trường hợp này, Trang web B là trang web đa trang nên bit sẽ được đặt cho A2 và bộ nhớ của trang web này sẽ được phân vùng từ A1.
Khi không có ngữ cảnh trên nhiều trang web nào trong chuỗi, bộ nhớ sẽ không được phân vùng. Ví dụ: Trang web A1 chứa một iframe cho A2, trong đó chứa một iframe cho A3 sẽ không được phân vùng cho A1, A2 hoặc A3 vì tất cả đều nằm trên cùng một trang web.
Đối với những trang web cần quyền truy cập không phân đoạn trên các iframe theo chuỗi, Chrome đang thử nghiệm việc mở rộng API Truy cập bộ nhớ để hỗ trợ trường hợp sử dụng này. Vì Storage Access API yêu cầu trang web được đóng khung phải gọi API một cách rõ ràng, nên điều này sẽ giảm thiểu rủi ro lừa đảo bằng lượt nhấp.
API đã cập nhật
Các API chịu ảnh hưởng của việc phân vùng có thể được chia thành các nhóm sau:
API bộ nhớ
- Hệ thống hạn mức
- Hệ thống hạn mức được dùng để xác định dung lượng ổ đĩa được phân bổ cho bộ nhớ. Hệ thống hạn mức quản lý từng phân vùng dưới dạng một bộ chứa riêng biệt để xác định dung lượng được phép và thời điểm xoá bộ chứa đó.
navigator.storage.estimate()
trả về thông tin của phân vùng. Các API chỉ dành cho Chrome nhưwindow.webkitStorageInfo
vànavigator.webkitTemporaryStorage
sẽ không còn được dùng nữa.- IndexedDB và Bộ nhớ đệm sử dụng hệ thống hạn mức phân vùng mới.
- Web Storage API
- Web Storage API cung cấp các cơ chế để trình duyệt có thể lưu trữ các cặp khoá/giá trị. Có hai cơ chế: Bộ nhớ cục bộ và Bộ nhớ phiên. Các tài khoản này hiện không được quản lý theo hạn mức nhưng vẫn được phân vùng.
- Hệ thống tệp riêng tư của Origin
- API Truy cập hệ thống tệp cho phép một trang web đọc hoặc lưu trực tiếp các thay đổi vào tệp và thư mục trên thiết bị sau khi người dùng cấp quyền truy cập. Hệ thống tệp riêng tư của nguồn cho phép nguồn lưu trữ nội dung riêng tư vào ổ đĩa mà người dùng có thể dễ dàng truy cập và được phân vùng.
- Storage Bucket API
- API Bộ nhớ đang được phát triển cho Storage Standard (Tiêu chuẩn bộ nhớ). API này hợp nhất nhiều API bộ nhớ như IndexedDB và localStorage bằng cách sử dụng một khái niệm mới có tên là bộ chứa. Dữ liệu được lưu trữ trong các bộ chứa và siêu dữ liệu liên kết với các bộ chứa được phân vùng.
- Tiêu đề Clear-Site-Data
- Việc đưa tiêu đề
Clear-Site-Data
vào phản hồi cho phép máy chủ yêu cầu xoá dữ liệu được lưu trữ trong trình duyệt của người dùng. Bạn có thể xoá bộ nhớ đệm, cookie và bộ nhớ DOM. Việc sử dụng tiêu đề chỉ xoá bộ nhớ trong một phân vùng.
- Kho URL blob
- Blob là một đối tượng chứa dữ liệu thô cần xử lý và bạn có thể tạo URL blob để truy cập vào tài nguyên. Kho URL blob không được phân vùng. Để hỗ trợ trường hợp sử dụng điều hướng trong ngữ cảnh cấp cao nhất đến bất kỳ URL blob nào (thảo luận), kho URL blob có thể được phân vùng theo cụm tác nhân thay vì trang web cấp cao nhất. Tính năng này chưa được cung cấp để thử nghiệm và cơ chế phân vùng có thể thay đổi trong tương lai.
API giao tiếp
Cùng với các API bộ nhớ, các API giao tiếp cho phép một ngữ cảnh giao tiếp qua các ranh giới gốc cũng được phân vùng. Những thay đổi này chủ yếu ảnh hưởng đến các API cho phép khám phá các ngữ cảnh khác thông qua tính năng truyền tin hoặc điểm hẹn cùng nguồn gốc.
Đối với các API giao tiếp sau, iframe của bên thứ ba không còn giao tiếp được với ngữ cảnh cùng nguồn gốc nữa:
- Kênh truyền tin
- Broadcast Channel API cho phép giao tiếp giữa ngữ cảnh duyệt web (cửa sổ, thẻ hoặc iframe) và worker có cùng nguồn gốc.
- iframe trên nhiều trang web
postMessage()
trong đó mối quan hệ giữa các ngữ cảnh được xác định rõ ràng là không được đề xuất thay đổi.
- SharedWorker
- SharedWorker API cung cấp một worker có thể truy cập được trên các ngữ cảnh duyệt web có cùng nguồn gốc.
- Khoá web
- Web Locks API cho phép mã chạy trong một thẻ hoặc trình chạy của cùng một nguồn gốc để lấy khoá cho một tài nguyên dùng chung trong khi thực hiện một số công việc.
API Trình chạy dịch vụ
API Trình chạy dịch vụ cung cấp giao diện để thực hiện các tác vụ ở chế độ nền. Các trang web tạo đăng ký ổn định để tạo ngữ cảnh worker mới nhằm phản hồi các sự kiện và worker đó có thể giao tiếp với bất kỳ ngữ cảnh cùng nguồn gốc nào. Ngoài ra, API Trình làm việc dịch vụ có thể thay đổi thời gian của các yêu cầu điều hướng, dẫn đến khả năng rò rỉ thông tin trên nhiều trang web, chẳng hạn như quét nhật ký.
Do đó, các Trình chạy dịch vụ được đăng ký từ ngữ cảnh của bên thứ ba sẽ được phân vùng.
API tiện ích
Tiện ích là các chương trình cho phép người dùng tuỳ chỉnh trải nghiệm duyệt web của họ.
Bạn có thể nhúng các trang tiện ích (trang có giao thức chrome-extension://
) trên các trang web trên web và trong những trường hợp này, các trang này sẽ tiếp tục có quyền truy cập vào phân vùng cấp cao nhất.
Các trang này cũng có thể nhúng các trang web khác, trong trường hợp đó, các trang web đó sẽ có quyền truy cập vào phân vùng cấp cao nhất của chúng miễn là tiện ích có quyền lưu trữ cho trang web đó.
Để biết thêm thông tin, hãy xem tài liệu về tiện ích.
Bản minh hoạ: kiểm thử tính năng phân vùng bộ nhớ
Trang web minh hoạ: https://storage-partitioning-demo-site-a.glitch.me/

Bản minh hoạ sử dụng hai trang web: trang web A và trang web B.
- Khi bạn truy cập vào trang web A trong ngữ cảnh cấp cao nhất, trang web này sẽ đặt dữ liệu bằng nhiều phương thức lưu trữ.
- Trang web B nhúng một trang từ trang web A và trang nhúng đó cố gắng đọc các tuỳ chọn bộ nhớ đã đặt trước đó.
- Khi trang web A được nhúng trên trang web B, trang web A sẽ không có quyền truy cập vào dữ liệu đó khi bộ nhớ được phân vùng và do đó, các lượt đọc sẽ không thành công.
- Bản minh hoạ sử dụng trạng thái thành công hoặc không thành công của mỗi lần đọc để cho biết dữ liệu có được phân vùng hay không.
Hiện tại, bạn có thể tắt tính năng phân vùng bộ nhớ trong Chrome bằng cách sử dụng công tắc dòng lệnh --disable-features=ThirdPartyStoragePartitioning
.
Bạn cũng có thể kiểm thử các trình duyệt khác theo cách tương tự để xem trạng thái phân vùng của các trình duyệt đó.
Tham gia và chia sẻ ý kiến phản hồi
- GitHub: Đọc đề xuất ban đầu, đặt câu hỏi và tham gia thảo luận.
- Hỗ trợ nhà phát triển: Đặt câu hỏi và tham gia thảo luận trên kho lưu trữ Hỗ trợ nhà phát triển Hộp cát về quyền riêng tư.
- Gửi lỗi: Gửi lỗi trong Công cụ theo dõi Chromium nếu bạn cho rằng có gì đó không hoạt động như mong đợi.