Container tabs chỉ cách ly cookie và bộ nhớ của trang, chứ không cách ly thiết bị. Xem rõ cái gì được cách ly, cái gì giữ nguyên và cái gì vẫn nhận ra bạn.
Firefox đang đưa container tabs vào thẳng bên trong trình duyệt — tính năng trước đây phải cài tiện ích Multi-Account Containers mới có, nay sắp trở thành một tùy chọn tích hợp sẵn. Đây là thời điểm thích hợp để làm rõ container thực sự làm gì, bởi mô hình tư duy mà hầu hết mọi người mang theo lại sai theo một cách quan trọng: container là một hũ cookie riêng biệt, không phải một trình duyệt riêng biệt. Toàn bộ nội dung bên dưới đều xoay quanh sự phân biệt đó — người đọc nào giả định ngược lại sẽ đặt niềm tin vào container cho một điều mà nó chưa bao giờ được thiết kế để cung cấp.
Những điểm chính
- Container là một hũ cookie riêng, không phải một phiên bản trình duyệt riêng — tài liệu
contextualIdentitiescủa MDN nói thẳng: "mỗi danh tính có một kho cookie riêng, không dùng chung với các tab khác". Trên Firefox, sự tách biệt đó kéo theo cả phần lưu trữ còn lại của trang. - Mọi thứ dưới tầng lưu trữ đều dùng chung: địa chỉ IP, handshake TLS/HTTP/2, đầu ra canvas/WebGL/audio, phông chữ đã cài, thông số màn hình, và múi giờ đều giống hệt nhau trên mọi container của cùng một trình duyệt.
- Một bên theo dõi dựa trên dấu vân tay chỉ thấy một khách truy cập, không phải hai — hai container trông như hai danh tính riêng biệt đối với một trang chỉ đọc cookie có thể ngay lập tức gộp lại thành một hồ sơ duy nhất ngay khi trang đó lấy dấu vân tay thay vì dựa vào lưu trữ.
- Container thực sự chặn được danh tính xuyên trang gắn với cookie: các phép dò trạng thái đăng nhập và theo dõi dựa trên redirect phụ thuộc vào một hũ cookie dùng chung sẽ không còn tác dụng khi bị tách vào các hũ cách ly riêng.
- Chúng nằm trong một họ các mô hình cách ly — cửa sổ riêng tư, hồ sơ trình duyệt riêng biệt, và VPN mỗi loại cách ly một tầng khác nhau, và nhầm lẫn tầng nào một công cụ bao phủ là cách phổ biến nhất khiến người dùng đặt quá nhiều niềm tin vào thiết lập của mình.
Container thực sự cách ly những gì
Tính năng contextual identities (danh tính ngữ cảnh) của Firefox — cơ chế đứng sau Multi-Account Containers, và giờ đây đứng sau container tích hợp sẵn — gán cho mỗi tab một danh tính container và khóa lưu trữ của trang vào danh tính đó. Tài liệu tham chiếu API contextualIdentities của MDN nói rất rõ về phần lưu trữ: "Bên trong, mỗi danh tính có một kho cookie riêng, không dùng chung với các tab khác", và được định danh bằng cookieStoreId. Trên Firefox, id của container đi kèm trong bộ thuộc tính nguồn (origin attributes) gắn vào các yêu cầu lưu trữ, nên trên thực tế thứ bị tách ra không chỉ có cookie — localStorage, IndexedDB và phần lưu trữ còn lại của trang cũng rơi vào những kho khác nhau tùy container.
Mở cùng một trang trong container "Work" và container "Personal", trang đó sẽ thấy hai kho lưu trữ hoàn toàn tách biệt — không cookie nào đặt ở container này rò rỉ sang container kia, và một phiên đăng nhập bắt đầu trong container này không mang sang container kia.
Có một điều cần tách bạch hẳn với tất cả những thứ trên: Firefox còn phân vùng trạng thái theo một trục hoàn toàn khác. Hướng dẫn State Partitioning của MDN mô tả cách trình duyệt "đánh khóa kép toàn bộ trạng thái phía client theo nguồn của tài nguyên được tải và theo trang cấp cao nhất" — bao trùm cả các API lưu trữ (localStorage, sessionStorage, IndexedDB, Service Worker) lẫn trạng thái mạng (cache HTTP, cache ảnh, DNS, định danh phiên TLS, HSTS). Tài liệu đó nói về cách ly xuyên trang, với khóa là trang trên thanh địa chỉ; nó không hề nhắc đến container. Trên Firefox bạn có cả hai cơ chế cùng lúc, và không cơ chế nào thay thế được cơ chế kia: một bên ngăn bên theo dõi bám theo bạn từ trang này sang trang khác, bên còn lại ngăn chính các danh tính của bạn nhìn thấy nhau.
Dù đi theo trục nào, cả hai cơ chế đều dừng lại ở tầng lưu trữ. Đó là những ranh giới có thật và hữu ích — và cũng là toàn bộ ranh giới. Không cơ chế nào chạm đến những gì trình duyệt tiết lộ về thiết bị hay mạng mà nó đang chạy trên đó.
Điều gì giữ nguyên trên mọi container
Đây là phần mà thông báo của Firefox không đi sâu vào, và cũng là phần mà người đọc dễ tự điền vào bằng một giả định không đúng nhất. Việc phân vùng của container chỉ hoạt động hoàn toàn ở tầng lưu trữ. Mọi tín hiệu đến từ cách trình duyệt và kết nối của bạn hoạt động, chứ không phải những gì một trang đã lưu trữ, đều không hề bị chạm tới:
- Địa chỉ IP và tuyến đường mạng của bạn — container không định tuyến lưu lượng khác đi hay thay đổi những gì máy chủ thấy kết nối của bạn đến từ đâu.
- Đặc điểm handshake TLS và HTTP/2 — cùng một thứ tự thương lượng và tham số được gửi đi bất kể container nào khởi tạo yêu cầu.
- Đầu ra Canvas, WebGL, và audio — cùng một GPU dựng ra cùng những pixel, cùng một audio context tạo ra cùng một dạng sóng ở mọi container, vì bên dưới vẫn là cùng một phần cứng và driver.
- Phông chữ đã cài và kích thước màn hình — được đọc trực tiếp từ hệ điều hành và màn hình, không phải từ bất cứ thứ gì container có thể giới hạn phạm vi.
- Múi giờ và ngôn ngữ — được báo cáo trực tiếp từ cấu hình hệ điều hành, giống hệt nhau ở mọi tab.
Kết hợp những tín hiệu đó lại, bạn có một dấu vân tay trình duyệt — và dấu vân tay không quan tâm container nào đã gửi yêu cầu. Nếu một trang nhận diện khách truy cập bằng dấu vân tay thay vì đọc cookie, hai container trên cùng một máy sẽ tạo ra cùng một dấu vân tay và gộp lại thành một danh tính bị theo dõi duy nhất, bất kể bạn đã giữ các hũ cookie của chúng tách biệt cẩn thận đến đâu. Bài viết của chúng tôi về entropy dấu vân tay và tập ẩn danh trình bày chỉ cần bao nhiêu tín hiệu trong số này là đủ để nhận diện duy nhất một thiết bị, ngay cả khi không có cookie nào tham gia. Muốn thấy điều này trực tiếp thay vì chỉ tin suông? Hãy mở cùng một trang trong hai container khác nhau và chạy công cụ kiểm tra dấu vân tay của BrowserInsight ở mỗi container — hash kết quả sẽ trùng khớp. Nếu không trùng, thứ làm nó đổi là một chế độ chống lấy dấu vân tay đang thêm nhiễu vào những tín hiệu như canvas theo từng trang, chứ không phải ranh giới container.
Container so với các mô hình cách ly khác
Container chỉ là một trong số ít công cụ cách ly của trình duyệt, và mỗi công cụ cách ly một tầng thực sự khác nhau. Nhầm lẫn giữa chúng chính là nơi phần lớn sự đặt niềm tin quá mức xảy ra.
| Mô hình cách ly | Cái gì được tách riêng | Cái gì vẫn dùng chung |
|---|---|---|
| Container tabs | Cookie và lưu trữ theo phạm vi trang, theo từng danh tính ngữ cảnh | Dấu vân tay thiết bị/mạng, địa chỉ IP — mọi thứ ở phần trên |
| Cửa sổ riêng tư/ẩn danh | Một hũ lưu trữ tạm thời, bị xóa khi đóng | Dấu vân tay thiết bị/mạng; bản thân cửa sổ thường có thể bị phát hiện là đang ở chế độ riêng tư qua hành vi hạn mức lưu trữ khác biệt |
| Hồ sơ trình duyệt riêng biệt | Cookie, lưu trữ, tiện ích mở rộng, và cài đặt cấp trình duyệt | Vẫn cùng một địa chỉ IP và cùng một dấu vân tay phần cứng nền tảng |
| VPN hoặc proxy | Tuyến đường mạng của bạn và địa chỉ IP mà máy chủ quan sát được | Mọi tín hiệu phía trình duyệt — cookie, dấu vân tay, mọi thứ trên tầng mạng |
Đọc ngang qua bảng này, có thể thấy rõ một mô hình: không công cụ đơn lẻ nào bao phủ nhiều hơn một hàng. Kết hợp container với VPN sẽ giải quyết đồng thời hai tầng thực sự khác nhau, và điều đó gần với những gì mọi người vẫn tưởng tượng "container tabs" một mình có thể mang lại.
Container thực sự phát huy tác dụng ở đâu
Không có điều gì ở trên khiến container trở nên vô dụng — nó chỉ xác định chính xác giá trị thực sự của container nằm ở đâu. Container có hiệu quả cụ thể đối với những kiểu theo dõi phụ thuộc vào một hũ cookie dùng chung, và có cả một phạm trù theo dõi đáng kể khớp với mô tả đó.
Phát hiện đăng nhập chéo trang — nơi một trang suy ra bạn đang đăng nhập vào những dịch vụ nào khác bằng cách dò thời gian tải, sự kiện lỗi, hoặc hành vi redirect gắn với cookie phiên hiện có của bạn — sẽ mất tín hiệu ngay khi các phiên đó nằm trong các container riêng biệt. Nếu bạn không đăng nhập vào một dịch vụ bên trong một container cụ thể, sẽ không còn trạng thái cookie dùng chung nào để dò nữa.
Bounce tracking hỏng vì đúng lý do cấu trúc đó. Nó biến domain của bên theo dõi thành bên thứ nhất trong thoáng chốc lúc redirect, cụ thể để cài hoặc đọc một định danh dựa trên cookie — mà định danh ấy chính là loại lưu trữ theo từng container mà danh tính ngữ cảnh giữ tách biệt, nên nó không thể nối lượt truy cập ở container này với lượt truy cập ở container kia. Với cả hai trường hợp, việc tách danh tính của bạn vào các hũ cookie riêng biệt loại bỏ đúng cơ chế mà kiểu theo dõi đó phụ thuộc vào.
Điều gì vẫn rò rỉ quanh ranh giới container
Theo dõi dựa trên cookie không phải là loại lưu trữ duy nhất mà một trang có thể dựa vào, và không phải mọi thứ duy trì trạng thái đều được giới hạn phạm vi giống như cookie. ETag và siêu cookie dựa trên cache giấu một định danh bên trong các header xác thực lại cache HTTP thông thường thay vì trong lưu trữ cookie.
Đến đây, hai cơ chế nói ở trên lại kéo về hai hướng khác nhau. Cache HTTP nằm trong danh sách trạng thái mạng mà tài liệu State Partitioning cho biết Firefox luôn đánh khóa theo trang cấp cao nhất — nên phiên bản xuyên trang của chiêu này đã bị chặn, bất kể có container hay không. Điều mà cả hai trang MDN đều không nói gì đến là phiên bản xuyên container: một trình duyệt và phiên bản cụ thể giới hạn phạm vi cache HTTP theo danh tính ngữ cảnh ra sao đơn giản là không được ghi trong tài liệu theo cách mà việc tách cookie đã được ghi. Giả định an toàn là: ranh giới container đã được chứng minh với cookie và với phần lưu trữ mà MDN mô tả, còn với bất cứ thứ gì khác thì chưa, cho đến khi bạn tự kiểm tra trên chính trình duyệt mình đang dùng.
Container là công cụ phân tách danh tính, không phải công cụ ẩn danh
Tóm tắt trung thực nhất chính là điều mà thông báo của Firefox để ngầm hiểu: container giữ các danh tính của bạn tách biệt với nhau trên cùng một thiết bị — một phiên đăng nhập công việc không bao giờ thấy cookie của phiên đăng nhập cá nhân, một phiên mua sắm không mang trạng thái ad-retargeting sang một tab không liên quan. Đó là phân tách danh tính (compartmentalization), và nó thực sự hữu ích cho đúng mục đích đó.
Nó không phải là công cụ ẩn danh để ẩn mình khỏi một trang đang theo dõi bạn. Một trang đọc cookie sẽ thấy các khách truy cập riêng biệt qua các container của bạn; một trang lấy dấu vân tay chỉ thấy một. Nếu bạn đang cân nhắc có nên tin tưởng giao việc đó cho một tiện ích mở rộng trình duyệt ngay từ đầu hay không, bài viết của chúng tôi về rủi ro quyền riêng tư từ tiện ích mở rộng trình duyệt bàn về câu hỏi rộng hơn: một phần mềm đã cài đặt có thể thấy được gì, bất kể nó nằm cạnh tính năng cách ly có sẵn nào. Hãy giữ hai mục tiêu này tách biệt trong đầu, và container sẽ làm đúng những gì nó hứa hẹn — không hơn, không kém.
Câu hỏi thường gặp
Container tabs có ẩn được dấu vân tay của tôi không?
Không. Container tabs phân vùng cookie và lưu trữ theo phạm vi trang theo từng danh tính ngữ cảnh; chúng không làm gì với địa chỉ IP, handshake TLS, kết xuất canvas/WebGL, phông chữ, thông số màn hình, hay múi giờ của bạn. Tất cả những tín hiệu đó đều giống hệt nhau trên mọi container của cùng một trình duyệt — và đó chính xác là những gì tạo nên một dấu vân tay.
Một trang web có biết được tôi đang dùng container không?
Không có API nào hướng ra trang web để thông báo điều đó: contextualIdentities là API dành cho tiện ích mở rộng (WebExtensions), các trang bạn truy cập không gọi được. Thứ một trang thấy được là hệ quả — một hũ cookie trống — và điều đó trông y hệt một khách vừa xóa cookie. Vấn đề là "bộ nhớ trống nhưng dấu vân tay quen thuộc" tự nó cũng là một khuôn mẫu, và đó chính là lý do container được thiết kế để các container không thể liên kết với nhau qua lưu trữ, chứ không phải để giấu đi sự tồn tại của tính năng này.
Việc Firefox biến container thành tính năng tích hợp sẵn có thay đổi những gì nó cách ly không?
Không. Container tích hợp sẵn trong Firefox 153 gộp chức năng của Multi-Account Containers vào thẳng trình duyệt, nhưng cơ chế nền tảng — vẫn là việc phân vùng lưu trữ theo danh tính ngữ cảnh mà contextualIdentities luôn mô tả — không hề thay đổi. Ranh giới cách ly vẫn là đúng ranh giới mà bài viết này mô tả, dù ở dạng nào.
Container có giống cửa sổ riêng tư/ẩn danh không?
Không. Một cửa sổ riêng tư dùng một hũ lưu trữ tạm thời duy nhất, bị xóa khi cửa sổ đóng lại; container cho bạn nhiều hũ lưu trữ bền vững chạy song song, mỗi hũ tách biệt với những hũ còn lại. Cửa sổ riêng tư cũng có những đặc điểm dễ bị phát hiện riêng — xem cách các trang phát hiện chế độ ẩn danh — những điều hoàn toàn không áp dụng cho container.
Tôi có cần VPN nếu đã dùng container không?
Chúng giải quyết hai vấn đề khác nhau. Container tách các danh tính của bạn khỏi nhau trên cùng một thiết bị bằng cách cách ly lưu trữ; VPN thay đổi tuyến đường mạng và địa chỉ IP mà máy chủ nhìn thấy — điều mà container hoàn toàn không chạm tới. Không cái nào thay thế được cái kia — xem công cụ kiểm tra VPN và proxy của BrowserInsight để có nửa phía mạng mà container không thể bao phủ.
Đọc thêm
- Tính nhất quán của vân tay: Tại sao tín hiệu mâu thuẫn bị gắn cờ
- Entropy dấu vân tay trình duyệt và tập ẩn danh là gì
- Cách website phát hiện chế độ ẩn danh và duyệt web riêng tư
- Phát hiện đăng nhập chéo trang: web biết bạn đang đăng nhập đâu
- Bounce Tracking: Redirect Âm Thầm Theo Dõi Không Cần Cookie
- ETag và siêu cookie cache: theo dõi vượt xa cookie
- Rủi ro quyền riêng tư từ tiện ích mở rộng trình duyệt


