Ngày phát hành: 2 tháng 4 năm 2025
Điều gì sẽ xảy ra khi bạn nhấp vào một đường liên kết? Màu sắc sẽ chuyển sang màu tím!
Kể từ những ngày đầu của Internet, các trang web đã dựa vào bộ chọn :visited
CSS để áp dụng các kiểu tuỳ chỉnh cho các đường liên kết mà người dùng đã nhấp vào trước đó. Bằng cách sử dụng bộ chọn :visited
, các trang web có thể cải thiện trải nghiệm người dùng và giúp người dùng di chuyển trên web. Tuy nhiên, khi khả năng tuỳ chỉnh của các đường liên kết đã truy cập tăng lên theo thời gian, thì số lượng cuộc tấn công do các nhà nghiên cứu bảo mật phát hiện cũng tăng lên.
Những cuộc tấn công này có thể tiết lộ những đường liên kết mà người dùng đã truy cập và rò rỉ thông tin chi tiết về hoạt động duyệt web của họ. Vấn đề bảo mật này đã gây phiền toái cho web trong hơn 20 năm và các trình duyệt đã triển khai nhiều biện pháp tạm thời để giảm thiểu các cuộc tấn công phát hiện nhật ký này. Mặc dù các biện pháp giảm thiểu này làm chậm các cuộc tấn công, nhưng không loại bỏ được các cuộc tấn công đó.
Kể từ Chrome 136, Chrome là trình duyệt lớn đầu tiên không còn bị các cuộc tấn công này ảnh hưởng. Bạn có thể thực hiện việc này bằng cách phân vùng nhật ký liên kết :visited
.
Phân vùng đường liên kết :visited
là gì?
Để hiển thị những đường liên kết mà bạn đã truy cập trước đó, trình duyệt phải theo dõi các trang mà bạn đã truy cập theo thời gian. Đây được gọi là nhật ký :visited
. Bạn có thể tạo kiểu cho các đường liên kết đã truy cập khác với các đường liên kết chưa truy cập bằng bộ chọn :visited
CSS:
:visited {
color: purple;
background-color: yellow;
}
Trước đây, nhật ký :visited
không được phân vùng. Điều này có nghĩa là không có giới hạn nào về vị trí hiển thị nhật ký :visited
bằng bộ chọn :visited
. Nếu bạn nhấp vào một đường liên kết, đường liên kết đó sẽ hiển thị là :visited trên mọi trang web hiển thị đường liên kết đó. Đây là lỗi thiết kế cốt lõi cho phép các cuộc tấn công tiết lộ thông tin về nhật ký duyệt web của người dùng.
Hãy xem ví dụ sau đây. Bạn đang duyệt xem trên Trang web A và nhấp vào một đường liên kết để chuyển đến Trang web B. Trong trường hợp này, Trang web B sẽ được thêm vào nhật ký :visited
. Sau đó, bạn có thể truy cập vào Trang web độc hại. Trang web này cũng tạo một đường liên kết đến Trang web B. Nếu không phân vùng, Site Evil sẽ hiển thị đường liên kết đó đến Site B dưới dạng :visited
, ngay cả khi bạn chưa nhấp vào đường liên kết trên Site Evil. Sau đó, Trang web độc hại có thể sử dụng một lỗ hổng bảo mật để tìm hiểu xem đường liên kết có được định kiểu là :visited
hay không, từ đó biết được rằng bạn đã từng truy cập vào Trang web B trước đây – rò rỉ thông tin về nhật ký duyệt web của bạn.
Trước khi phân vùng, khi bạn nhấp vào một đường liên kết:
Thẻ này sẽ hiển thị dưới dạng :visited trên mọi trang web hiển thị đường liên kết đó!
Tính năng phân vùng bảo vệ nhật ký duyệt web của bạn bằng cách chỉ hiển thị một đường liên kết là đã truy cập nếu bạn từng nhấp vào đường liên kết đó từ trang web này. Nếu bạn chưa từng tương tác với trang web này, thì các đường liên kết của trang web sẽ không được định kiểu là :visited
.
Hãy xem xét ví dụ trước, nhưng với tính năng phân vùng được bật. Bạn đang duyệt web trên Trang web A và nhấp vào một đường liên kết để chuyển đến Trang web B, tổ hợp "Trang web A + Trang web B" sẽ được lưu trữ trong nhật ký :visited. Bằng cách này, khi bạn truy cập vào Site Evil, đường liên kết của trang web này đến Site B sẽ không hiển thị dưới dạng :visited
vì đường liên kết này không khớp với cả hai phần của mục "Site A + Site B" (ngữ cảnh mà bạn ban đầu nhấp vào đường liên kết). Vì không có nhật ký duyệt web nào hiển thị trên Site Evil, nên trang web này không thể tận dụng bất kỳ lỗ hổng nào. Do đó, nhật ký duyệt web của bạn vẫn an toàn!
Sau khi phân vùng, khi bạn nhấp vào một đường liên kết:
Thẻ này chỉ hiển thị dưới dạng :visited
khi bạn đã nhấp vào thẻ đó trước đó!
Tóm lại, việc phân vùng đề cập đến việc lưu trữ các đường liên kết của bạn cùng với thông tin bổ sung về vị trí người dùng đã nhấp vào các đường liên kết đó. Trong Chrome, đó là: URL của đường liên kết, trang web cấp cao nhất và gốc khung. Khi bạn bật tính năng phân vùng, nhật ký :visited
sẽ không còn là danh sách toàn cục mà mọi trang web đều có thể truy vấn. Thay vào đó, nhật ký :visited
của bạn được "phân vùng" hoặc tách biệt theo bối cảnh mà bạn đã truy cập vào đường liên kết đó ngay từ đầu.
Còn đường liên kết đến các trang khác trên cùng một trang web thì sao?
Khi duyệt web, bạn có thể nhấp vào nhiều đường liên kết, tất cả đều trỏ về các trang con khác nhau trên cùng một trang web. Ví dụ: khi nghiên cứu các loại kim loại, bạn có thể truy cập vào các trang Site.Wiki
cho "chrome" và "đồng thau".
Trong quá trình triển khai phân vùng cứng nhắc, người dùng trên trang Site.Wiki
cho vàng sẽ không có đường liên kết đến các trang chrome và đồng thau hiển thị dưới dạng :visited
. Nguyên nhân là do người dùng đã nhấp vào từng trang trong số này từ một trang web cấp cao nhất không khớp với trang Site.Wiki
cho vàng.
Để cải thiện trải nghiệm người dùng trong trường hợp này mà vẫn đảm bảo quyền riêng tư và tính bảo mật của việc phân vùng, chúng tôi đã giới thiệu một phần riêng cho đường liên kết tự động. Tóm lại, một trang web có thể hiển thị các trang con của riêng trang web dưới dạng :visited
, ngay cả khi trước đây người dùng chưa từng nhấp vào các đường liên kết này trong ngữ cảnh này. Vì các trang web có các phương thức khác để theo dõi xem người dùng có truy cập vào các trang con của trang web hay không, nên việc giới thiệu các đường liên kết tự thân sẽ không cung cấp thêm thông tin mới cho các trang web này.
Tính năng phân vùng vẫn bảo vệ khỏi hoạt động theo dõi trên nhiều trang web và thực thi chính sách cùng nguồn gốc. Tuy nhiên, điều quan trọng cần lưu ý là điều này chỉ áp dụng cho các đường liên kết đến các trang con của trang web. Đường liên kết đến trang web của bên thứ ba hoặc trong iframe của bên thứ ba không đủ điều kiện áp dụng ngoại lệ này.
Sau khi loại bỏ "đường liên kết tự thân":
Trạng thái triển khai
Những điểm cải tiến này về bảo mật và quyền riêng tư của :visited
sẽ có trong Chrome Phiên bản 136. Chrome là trình duyệt đầu tiên triển khai các biện pháp bảo vệ này cho người dùng.
Tương tác và chia sẻ ý kiến phản hồi
- Đề xuất ban đầu.,
- Đặt câu hỏi và tham gia thảo luận.
- Gửi lỗi trong trình theo dõi Chromium nếu bạn cho rằng có gì đó không hoạt động như mong đợi.