← Trở về blog

Font fingerprinting là gì? Cách website nhận diện trình duyệt qua danh sách font

Đã đổi cả môi trường lẫn proxy mà bố cục trang vẫn có những chênh lệch nhỏ: cùng một website, chữ trên nút của môi trường này rộng hơn môi trường kia đúng hai pixel. Một nguồn gây ra khác biệt bố cục là font: máy cài font gì, website đo thử một vòng là biết gần đúng, và danh sách font vì thế trở thành một nhóm tham số trong browser fingerprint. Bài viết này bàn ba việc: website đo font thế nào, kết quả đo đáng tin đến đâu, và ba chế độ danh sách font (Thật / Ngẫu nhiên / Tùy chỉnh) phù hợp với tình huống nào. Về vị trí của font trong tổng thể fingerprint, MostMate xếp nó vào nhóm tham số nền tảng trong phần cài đặt fingerprint; bức tranh toàn cảnh sản phẩm xem bài MostMate là gì.

Font fingerprinting là gì: website đang đoán máy bạn cài font nào

Font fingerprinting không phải đóng gói file font của bạn gửi lên, mà là website dùng một loạt phép thử để suy ra máy có hiển thị được font đó hay không. Hệ điều hành xuất xưởng đã kèm sẵn một bộ font, người dùng và phần mềm lại tiếp tục thêm vào: cài Office là có thêm một loạt, Windows bản tiếng Trung còn kèm SimSun và Microsoft YaHei. Hai máy hầu như không bao giờ trùng trọn bộ font, và chính sự khác biệt đó là thông tin. Ngay từ nghiên cứu truy vết năm 2010, EFF đã liệt font vào nhóm tham số nhận diện, và từ đó đến nay dạng kiểm tra này vẫn hiện diện trên các website lớn.

Điểm khác của font so với các tham số fingerprint khác là tốc độ thay đổi: Canvas, WebGL do phần cứng và engine render quyết định, thường vài tháng mới dịch một lần; danh sách font lại đi theo việc cài phần mềm: cài thêm một phần mềm văn phòng, xóa đi một file font, danh sách đổi ngay. Tham số đổi nhanh thì cũng lộ nhanh: chỉ một lần cài phần mềm đã đủ để danh sách lệch khỏi trạng thái ban đầu.

Website đo font thế nào: ba phương pháp, đều chỉ đo “có hay không”

Website không đọc trực tiếp danh sách font của hệ thống, chỉ có thể suy gián tiếp; ba cách làm phổ biến như sau:

  1. Đo chênh lệch chiều rộng. Đặt một đoạn văn bản cố định trong trang, đo chiều rộng một lần với font dự phòng (ví dụ monospace), rồi đo lại khi chỉ định font mục tiêu. Hai lần bằng nhau nghĩa là font mục tiêu không có; khác nhau nghĩa là nó có. Script kiểm tra lượt qua hàng trăm tên font phổ biến là ghép được một danh sách “có / thiếu”.
  2. So sánh render Canvas. Dùng Canvas vẽ cùng một đoạn văn bản với các font khác nhau rồi so khác biệt pixel, kéo theo cả khác biệt giữa các engine render.
  3. Font Loading API. Trình duyệt hiện đại cung cấp giao diện dạng document.fonts.check('12px "Segoe UI"'), trả thẳng font có sẵn dùng hay không, đỡ công hơn việc đo chiều rộng.
Ba phương pháp phát hiện font fingerprint của trình duyệt

Cả ba phương pháp đều đo “tên font này máy này dùng được không”, không đụng tới bản thân file font; thực tế người ta hay phối hợp, đo chiều rộng làm chủ lực, Canvas kiểm tra chéo. Chi tiết giao diện xem tài liệu Document.fonts trên MDN, danh sách font được thử và logic quyết định xem mã nguồn kiểm tra font của FingerprintJS.

Kết quả đo vốn dĩ không trọn vẹn: thứ bạn nhận không phải danh sách đầy đủ

Phần này chỉnh trước một cách hiểu hay gặp. Website không đo được toàn bộ font bạn cài, chỉ đo được phần nằm trong danh sách của nó; kết quả thực chất là giao của “danh sách font phổ biến ∩ máy của bạn”.

Hệ quả có hai mặt. Một: hai máy có bộ font khác nhau vẫn có thể ra cùng kết quả: máy thứ nhất cài font A và B, máy thứ hai cài A và C, điểm kiểm tra chỉ thử A và D, cả hai máy đều báo “có A, không có D”, giá trị hash giống nhau. Font fingerprint trùng nhau không suy ra được hai máy là một, nó chỉ chứng minh hai máy hành xử giống nhau trong phạm vi danh sách thử.

Hai: phần nằm ngoài danh sách thì vô hình hoàn toàn. Một trạm thiết kế cài 300 font và một máy chỉ có hệ thống trơn, nếu danh sách thử chỉ phủ 150 font phổ biến thì 150 font dư ra không ai thấy.

Với người vận hành nhiều tài khoản, kết quả đo thiếu hụt này là con dao hai lưỡi: riêng font không định danh được, nhưng risk control sẽ đem font đối chiếu chéo với tín hiệu khác; danh sách một lần lệch với hệ điều hành, cài đặt ngôn ngữ là thành điểm bất thường nổi bật. Số font và giá trị hash mà công cụ kiểm tra hiển thị, cứ đọc theo tinh thần “cùng môi trường thì ổn định, khác môi trường thì khác nhau”, đừng mê một con số cụ thể nào.

Những yếu tố nào đang định hình danh sách font của bạn

Bộ font là bốn lớp xếp chồng lên nhau, và mỗi lớp đều có thể bộc lộ khác biệt giữa hai máy “trông như nhau”:

  • Hệ điều hành và phiên bản. Windows, macOS, Linux có bộ font xuất xưởng khác nhau; cùng Windows mà 10 với 11 cũng không giống hẳn. Đây là nền tảng để danh sách font xác nhận chéo với nền tảng mà UA khai báo.
  • Ngôn ngữ và khu vực của hệ thống. Windows bản tiếng Trung kèm sẵn SimSun, Microsoft YaHei mà đa số máy Âu, Mỹ không có; hệ thống Nhật, Hàn cũng vậy. Danh sách font thường là tín hiệu đầu tiên tố cáo xuất xứ khu vực thật của môi trường.
  • Phần mềm cài kèm. Office, Adobe, WPS đều nhét font nhà mình vào hệ thống; máy làm thiết kế và máy chỉ chạy trình duyệt chênh nhau rất xa về bộ font.
  • Quy tắc dự phòng của engine trình duyệt. Cùng một tên font, Chromium và Firefox chọn font dự phòng khác nhau, chiều rộng đo ra cũng khác; đổi phiên bản kernel của môi trường là chi tiết kết quả có thể đổi theo.
Bốn yếu tố ảnh hưởng tới danh sách font của trình duyệt

Bốn lớp xếp chồng giải thích một hiện tượng quen thuộc: môi trường đã đổi IP, múi giờ, ngôn ngữ đủ cả mà danh sách font vẫn còn “về quê”: khai báo môi trường tiếng Anh tại Mỹ, trong font vẫn nằm nguyên Microsoft YaHei. Khi đối chiếu chéo, loại lệch lạc này nói lên vấn đề rõ hơn bất thường của một tham số đơn lẻ.

Đánh giá tính nhất quán thế nào: ba tiêu chí và ba bước tự kiểm tra

Đặt trong quản lý môi trường, tham số font phải qua ba tiêu chí:

  1. Ổn định trong một môi trường. Kiểm tra lại nhiều lần cùng một môi trường, số font và giá trị hash giữ nguyên. Đang dùng môi trường thì đừng tiện tay cài phần mềm, xóa font.
  2. Khác nhau giữa các môi trường. Môi trường khai báo khác khu vực phải có danh sách font khác thấy được; hai môi trường “người Mỹ” và “người Đức” ra cùng một hash font là tín hiệu đáng ngờ.
  3. Khớp với thông tin đã khai. Môi trường Windows lại xuất hiện font riêng có của macOS, môi trường tiếng Anh lại kéo theo cả hàng font tiếng Trung, đều là lệch lạc rõ ràng. Rủi ro của việc ngẫu nhiên hóa tham số được bàn riêng trong bài Vì sao ngẫu nhiên hóa fingerprint lại nguy hiểm, và font là ví dụ điển hình nhất của logic đó: bộ font ghép ngẫu nhiên hầu như không tồn tại trong thế giới thật.

Ba bước tự kiểm tra: mở trang kết quả trên BrowserScan hoặc Iphey, tìm mục font (Fonts) ghi lại con số; refresh cùng môi trường hai ba lần xem có ổn định không; mở môi trường thứ hai chạy cùng phép kiểm tra, so độ chênh có hợp “nhân thân” của từng môi trường không.

Mục font trên trang kết quả của BrowserScan

Chọn chế độ danh sách font của MostMate thế nào

Trong phần cài đặt fingerprint, danh sách font của MostMate có ba chế độ Thật, Ngẫu nhiên, Tùy chỉnh, ứng với ba kiểu sử dụng:

  • Thật: môi trường dùng nguyên danh sách font hiện tại của máy host, kết quả đo trùng với việc bạn tự mở trình duyệt. Phù hợp khi máy host cấu hình sạch, nhân thân khớp khu vực của hệ điều hành host, chẳng hạn máy dùng Windows bản tiếng Anh và bạn đang làm đúng môi trường Mỹ.
  • Ngẫu nhiên: môi trường tự sinh một tổ hợp font, với điều kiện thuật toán chỉ ghép trong phạm vi hệ điều hành và ngôn ngữ, để bộ font nằm trong vùng hợp lý của nhân thân. Phù hợp khi dựng môi trường hàng loạt, không cần rà từng chi tiết font trong quỹ đạo hằng ngày.
  • Tùy chỉnh: tự tay tích chọn danh sách font, hợp với môi trường có nền tảng mục tiêu siết risk control chặt, hoặc nhân thân cách xa máy host; hãy bổ sung đủ bộ font của hệ điều hành tương ứng theo nhân thân, và khi cấu hình đối chiếu từng mục với ba tiêu chí ở phần trên.

Cả ba chế độ nằm trong phần cài đặt fingerprint của form tạo môi trường; sau khi cấu hình, xác nhận giá trị hiện tại ở trường “Font list” trong bảng xem trước fingerprint, rồi chạy lại một lượt trên điểm kiểm tra. Quy trình cấu hình đầy đủ xem bài Người mới bắt đầu với MostMate thế nào.

Lời kết

Bản chất của font fingerprint là website dùng một danh sách thử hữu hạn để suy ra bộ font trên máy: không đo được danh sách đầy đủ, nhưng đủ để lộ các lệch lạc khi đối chiếu chéo. Về quản lý, cứ nắm ba việc: ổn định trong từng môi trường, tách biệt giữa các môi trường, danh sách font khớp với hệ điều hành và khu vực đã khai. Muốn dựng trọn một hệ môi trường từ con số không, hãy tải MostMate trước; logic nhất quán của từng mục fingerprint, đa số tìm được lời giải trong bài Bốn nguyên tắc thiết kế của MostMate.

FAQ

Font fingerprint có tự nhận diện được một thiết bị không?

Không. Kết quả đo chịu giới hạn của danh sách thử, hai máy có bộ font khác nhau vẫn có thể ra cùng kết quả. Risk control thường đem font đối chiếu chéo cùng UA, Canvas, ngôn ngữ và các tham số khác; riêng font không đủ làm căn cứ định danh.

Font fingerprint trên các trình duyệt khác nhau có giống nhau không?

Khi bộ font trùng nhau thì xu hướng chung giống nhau, nhưng quy tắc dự phòng và chi tiết render của mỗi engine khác nhau nên giá trị chiều rộng sẽ chênh. Trên cùng một máy, kết quả của Chrome và Firefox hay lệch nhau ở chi tiết; đó là khác biệt giữa các engine.

Cài càng nhiều font càng dễ bị nhận diện?

Font dư ra chỉ hiện lên khi rơi vào danh sách kiểm tra. Số lượng tự nó ảnh hưởng hạn chế, font hiếm là ngoại lệ: một font thiết kế ít người dùng một lần bị đo thấy, cả danh sách sẽ trông hiếm hoi hơn về mặt thống kê.

Xóa Cookie có xóa được font fingerprint không?

Không. Danh sách font đến từ những gì máy đã cài, không thuộc dữ liệu lưu trữ của website, nên xóa Cookie hay xóa cache đều không ảnh hưởng tới nó; muốn thay đổi phải đổi cấu hình font ở tầng môi trường.

MOSTMATE

Quản lý nhiều tài khoản an toàn, thật đơn giản

Bắt đầu với tài khoản đầu tiên và dùng MostMate để xây dựng hoạt động đa tài khoản an toàn, thông minh và hiệu quả hơn.

  • Hồ sơ độc lập. Danh tính nhất quán.
  • Tự động hóa bằng AI · Tình trạng tài khoản · Vận hành nhóm
Tải MostMate