screen.width, availHeight và devicePixelRatio cho trang web biết gì về màn hình, vì sao chỉ thêm vài bit, và letterboxing của Tor che chúng ra sao.
Mọi trang bạn mở đều đọc được màn hình của bạn lớn cỡ nào, hệ điều hành chừa lại bao nhiêu chỗ trống, và mỗi điểm ảnh CSS tương ứng bao nhiêu điểm ảnh vật lý. Không cần hộp thoại xin quyền nào. Riêng giá trị này là phổ biến và có entropy thấp, nhưng nó là một trong những tín hiệu rẻ nhất để kẻ theo dõi thêm vào một dấu vân tay lớn hơn, và là một trong những tín hiệu dễ nhất để bên phát hiện đối chiếu chéo.
Điểm chính
- Trang web đọc được
screen.width,screen.height,screen.availWidth,screen.availHeight,screen.colorDepthvàwindow.devicePixelRatiomà không cần hỏi. availHeightthường nhỏ hơnheightvì thanh tác vụ, Dock hoặc thanh menu chiếm chỗ; phần chênh lệch này lộ một phần cách bố trí màn hình nền.devicePixelRatiothay đổi theo tỷ lệ hiển thị và mức thu phóng của trình duyệt, nên nó mô tả thiết lập hiện tại của bạn, không chỉ phần cứng.- Riêng các giá trị màn hình có entropy thấp. Chúng quan trọng vì nhân lên cùng GPU, phông chữ và nền tảng, như phép tính tập ẩn danh cho thấy.
- Biện pháp phòng vệ xếp mọi người vào vài "nhóm": letterboxing của Tor Browser và việc làm tròn của resist-fingerprinting trong Firefox.
Trang web đọc được gì
Giao diện Screen trên MDN liệt kê thuộc tính của màn hình chứa cửa sổ. Những thuộc tính dùng trong lấy dấu vân tay là:
| Thuộc tính | Báo cáo gì |
|---|---|
screen.width / screen.height | Kích thước màn hình theo điểm ảnh CSS |
screen.availWidth / screen.availHeight | Không gian trang dùng được, đã trừ giao diện hệ điều hành như thanh tác vụ |
screen.colorDepth | Số bit mỗi điểm ảnh dành cho màu |
window.devicePixelRatio | Tỷ lệ điểm ảnh vật lý trên điểm ảnh CSS |
window.innerWidth / outerWidth (và chiều cao) | Kích thước vùng nhìn và của cả cửa sổ trình duyệt |
Kích thước cửa sổ được định nghĩa trong CSSOM View Module của W3C, cùng với các thuộc tính màn hình. Lưu ý width và height tính theo điểm ảnh CSS, không phải điểm ảnh phần cứng. Một laptop có tấm nền vật lý 2880×1800 và tỷ lệ 2 thường báo 1440×900.
Vì sao kích thước khả dụng khác kích thước đầy đủ
Trang MDN về availWidth mô tả giá trị này là chiều rộng màn hình trừ các thành phần giao diện người dùng luôn hiển thị, như thanh tác vụ. availHeight cũng vậy. Vì thế màn hình báo 1920×1080 với availHeight là 1040 cho thấy khoảng 40 điểm ảnh chiều cao được dành riêng, có thể là thanh tác vụ. Dock tự ẩn hoặc thanh menu ở cạnh khác sẽ cho ra số khác.
Phần chênh lệch đó là một rò rỉ nhỏ nhưng có thật về cách sắp xếp màn hình nền. Hai người dùng cùng loại màn hình vẫn có thể khác nhau ở đây do kích thước, vị trí hay chế độ tự ẩn của thanh tác vụ. Chúng tôi không liệt kê giá trị chênh lệch theo từng hệ điều hành, vì chúng đổi theo phiên bản và cài đặt người dùng.
devicePixelRatio: tỷ lệ hiển thị lộ ra
Trang MDN về devicePixelRatio định nghĩa nó là tỷ lệ giữa độ phân giải theo điểm ảnh vật lý và độ phân giải theo điểm ảnh CSS của thiết bị hiển thị hiện tại. Hai thứ làm nó thay đổi:
- Tỷ lệ hiển thị. Màn hình 4K đặt 150% trong cài đặt hệ điều hành báo tỷ lệ khác với cùng màn hình đó ở 100%.
- Thu phóng của trình duyệt. Trên nhiều trình duyệt máy tính, thu phóng làm đổi tỷ lệ này, vì nó đổi số điểm ảnh thiết bị phủ một điểm ảnh CSS. MDN lưu ý thu phóng ảnh hưởng đến giá trị, nên hai lần truy cập từ cùng một máy có thể khác nhau.
Do đó nó là tín hiệu về cấu hình hiện tại của bạn. Nó cũng giúp phân biệt trình duyệt trên màn hình mật độ cao với màn hình thường, điều mà riêng screen.width không làm được.
Vì sao kẻ theo dõi vẫn muốn có nó
Màn hình 1920×1080 được rất nhiều người dùng máy tính chia sẻ, nên riêng giá trị này đặt bạn vào một đám đông lớn. Rủi ro nằm ở phép nhân. Mỗi thuộc tính độc lập thu hẹp đám đông, và hình học màn hình độc lập với trình kết xuất GPU, danh sách phông chữ và múi giờ. Hướng dẫn lấy dấu vân tay trình duyệt liệt kê vị trí dữ liệu màn hình giữa các tín hiệu khác, còn entropy và tập ẩn danh cho thấy một nhúm bit entropy thấp cộng lại ra sao.
Nó cũng có hai đặc tính mà kẻ theo dõi ưa thích. Nó thụ động: không cần dò API hay kiểm tra kết xuất, chỉ đọc thuộc tính. Và nó rẻ: chạy tức thì, không gây độ trễ nhìn thấy được.
Giá trị bất thường nổi bật hơn. Kích thước màn hình hiếm, tỷ lệ không nguyên do thu phóng tùy chỉnh, hay kích thước cửa sổ mà không màn hình chuẩn nào tạo ra thu hẹp đám đông nhiều hơn hẳn một tấm nền 1080p phổ biến. Lấy dấu vân tay trình duyệt di động nói về cách điện thoại, với nhiều tỷ lệ điểm ảnh, khác máy tính.
Kích thước cửa sổ là một tín hiệu riêng
Trang đọc được kích thước vùng nhìn và cửa sổ trình duyệt, không chỉ màn hình. Chúng thay đổi khi bạn đổi cỡ, ghim cửa sổ hoặc mở công cụ nhà phát triển, nên chúng nhận diện một phiên nhiều hơn một thiết bị. Chúng cũng lộ chút ngữ cảnh: vùng nhìn hẹp hơn màn hình gợi ý cửa sổ chưa phóng to. Bài lấy dấu vân tay qua CSS media query chỉ ra một đường liên quan, nơi truy vấn CSS để lộ hình học tương tự mà không cần script đọc screen.
Nhiều màn hình và Window Management API
Khi có nhiều màn hình, đối tượng screen cơ bản chỉ mô tả màn hình chứa cửa sổ. Window Management API được thiết kế để trang lấy thông tin về mọi màn hình đang kết nối và đặt cửa sổ trên chúng. MDN mô tả nó nằm sau một quyền, nên đây không phải tín hiệu "không cần hỏi" như các thuộc tính trên. Chúng tôi không khẳng định trình duyệt nào hỗ trợ; hãy xem bảng tương thích trên trang đó cho trình duyệt bạn nhắm tới.
Kiểm tra tính nhất quán
Giá trị màn hình phải khớp với thiết bị mà trình duyệt tự nhận. User agent di động báo màn hình 2560×1440 với tỷ lệ 1 là không khớp, cửa sổ lớn hơn màn hình chứa nó cũng vậy. Công cụ tự động hóa đổi user agent nhưng quên màn hình để lại đúng kẽ hở này. Danh sách kiểm tra tính nhất quán của dấu vân tay có kiểm tra màn hình trong bảy mục, còn hardwareConcurrency và deviceMemory nói về một cặp giá trị khác có thể đối chiếu độ hợp lý.
Hình học kết xuất là một đối chiếu chéo khác. Kích thước phần tử trang đo bằng script phụ thuộc tỷ lệ hiển thị, như lấy dấu vân tay ClientRects giải thích, nên tỷ lệ khai báo không khớp hình học đo được là thêm một chỗ khiến lớp ngụy trang có thể lộ tẩy.
Phòng vệ: làm tròn vào nhóm
Mục tiêu của phòng vệ là đám đông lớn hơn, không phải giả mạo ngẫu nhiên.
- Letterboxing của Tor Browser. Bài phát hành Tor Browser 9.0 mô tả cửa sổ nội dung được làm tròn thành bội số của 200×100 điểm ảnh, để người dùng rơi vào vài nhóm. Letterboxing xử lý việc đổi cỡ và phóng to bằng cách thêm lề trắng để cửa sổ gần kích thước mong muốn mà vẫn nằm trong một nhóm.
- resist-fingerprinting của Firefox.
privacy.resistFingerprintingmượn cùng ý tưởng làm tròn. Xem giải thích resist fingerprinting để biết nó đổi gì và làm hỏng gì.
Cái giá thấy rõ: có lề quanh trang và bố cục hơi thiếu chính xác.
BrowserInsight thực sự làm gì
Nói thẳng: Kiểm tra vân tay hiển thị rộng nhân cao, tỷ lệ điểm ảnh, độ sâu màu và vùng khả dụng đúng như trình duyệt báo. Trang phát hiện bot chạy kiểm tra screen_size xem kích thước có nằm trong phạm vi hợp lý không (rộng 320 đến 7680, cao 480 đến 4320). Khi user agent tự nhận là thiết bị di động, phần kiểm tra công cụ nhà phát triển còn so kích thước cửa sổ ngoài với kích thước màn hình, vì chênh lệch lớn ở đây là dấu hiệu điển hình của chế độ giả lập thiết bị trong DevTools. Ngoài ra, nó không đối chiếu giá trị màn hình với user agent hay GPU của bạn. Toàn bộ việc thu thập chạy trong trình duyệt và không gửi gì lên máy chủ.
Câu hỏi thường gặp
Độ phân giải màn hình của tôi có duy nhất không? Riêng nó thì hiếm khi. Kích thước phổ biến được nhiều người dùng chung. Nó chỉ mang tính nhận diện khi kết hợp với các tín hiệu khác.
Vì sao availHeight khác height?
Hệ điều hành dành chỗ cho giao diện như thanh tác vụ hoặc Dock, và availHeight loại phần đó ra.
Thu phóng trình duyệt có đổi kích thước màn hình không?
Thu phóng chắc chắn đổi devicePixelRatio và kích thước vùng nhìn theo điểm ảnh CSS. Kích thước màn hình được báo có đổi theo hay không thì tùy trình duyệt, nên đừng coi screen.width là không bị thu phóng ảnh hưởng.
VPN có giấu độ phân giải màn hình không? Không. VPN đổi địa chỉ mạng, không đổi những gì trình duyệt báo về màn hình của nó.
Kết luận
Kích thước màn hình, vùng khả dụng và tỷ lệ điểm ảnh là những tín hiệu thụ động nhỏ, không cần quyền, và thêm vài bit vào bất kỳ dấu vân tay nào. Vai trò lớn hơn của chúng là kiểm tra độ hợp lý so với thiết bị mà trình duyệt tự nhận. Xem trình duyệt của bạn báo gì trên công cụ kiểm tra vân tay, và đọc hướng dẫn lấy dấu vân tay trình duyệt để thấy toàn cảnh.


